当前位置: 首页 > news >正文

【前端每日基础】day23——箭头函数

箭头函数是ES6(ECMAScript 2015)引入的一种新的函数表达式语法。相比传统函数,箭头函数有简洁的语法,并且不绑定自己的this、arguments、super或new.target。以下是详细介绍箭头函数的各个方面:

基本语法
单参数箭头函数
如果箭头函数只有一个参数,可以省略参数周围的括号:

// 传统函数
let greet = function(name) {return "Hello, " + name;
};// 箭头函数
let greet = name => {return "Hello, " + name;
};

多参数箭头函数
如果箭头函数有多个参数,需要使用括号将参数括起来:

let sum = (a, b) => {return a + b;
};

无参数箭头函数
如果箭头函数没有参数,仍然需要使用空括号:

let sayHello = () => {return "Hello!";
};

简写形式
如果箭头函数的函数体只有一条语句,并且是返回值,则可以省略大括号和return关键字:

// 带大括号和return的写法
let square = x => {return x * x;
};
// 简写形式
let square = x => x * x;

this绑定
箭头函数最显著的特点之一是它不会创建自己的this上下文,而是从其外层上下文中继承this。这使得在某些场景下使用箭头函数更为方便,尤其是在需要保留外层this的情况下。

传统函数中的this问题

function Person() {this.age = 0;setInterval(function growUp() {this.age++; // 这里的this指向的是全局对象(或undefined,取决于是否在严格模式下)}, 1000);
}let p = new Person();

箭头函数中的this绑定

function Person() {this.age = 0;setInterval(() => {this.age++; // 这里的this指向的是Person实例}, 1000);
}let p = new Person();

其他特性
不绑定arguments对象
箭头函数不绑定arguments对象,但可以使用rest参数语法代替:

let traditionalFunction = function() {console.log(arguments); // 类数组对象,包含所有参数
};
traditionalFunction(1, 2, 3); // 输出[1, 2, 3]let arrowFunction = (...args) => {console.log(args); // 数组,包含所有参数
};
arrowFunction(1, 2, 3); // 输出[1, 2, 3]

不能作为构造函数
箭头函数不能用作构造函数,使用new关键字调用箭头函数会抛出错误:

let Foo = () => {};
let foo = new Foo(); // TypeError: Foo is not a constructor

没有prototype属性
由于箭头函数不能用作构造函数,它们也没有prototype属性:

javascript
复制代码

let Foo = () => {};
console.log(Foo.prototype); // 输出undefined

使用场景
简化回调函数:箭头函数在编写简短的回调函数时特别有用。

javascript
复制代码

// 传统回调函数
[1, 2, 3].map(function(x) {return x * x;
});

// 箭头函数

[1, 2, 3].map(x => x * x);

保持this的上下文:在需要访问外层this的情况下,箭头函数非常适合。

function Timer() {this.seconds = 0;setInterval(() => {this.seconds++;console.log(this.seconds);}, 1000);
}
let timer = new Timer();

简洁的函数表达式:当需要简洁的函数表达式时,箭头函数提供了更为简便的语法。

http://www.lryc.cn/news/355496.html

相关文章:

  • 27.Java中单例模式的实现方式
  • C#面:当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
  • express框架下后端获取req.body报错undefined
  • Element plus 低版本弹窗组件添加拖拽功能
  • 计算机组成原理易混淆知识点总结(持续更新)
  • 【STM32踩坑】HAL固件库版本过高导致烧录后无法运行问题
  • 芯片丝印反查
  • C语言之指针详解(5)(含有易错笔试题)
  • discuzX2.5的使用心得 札记一
  • 【Python】 探索Django框架的高并发处理能力
  • C-数据结构-平横二叉树
  • 算法训练营day41
  • cesium开发实例分享
  • 字符串和字符串函数(1)
  • 基于springboot+vue的班级综合测评管理系统
  • 蓝海项目揭秘:跨境选品师的崛起与挑战
  • 酷黑简洁大气体育直播自适应模板赛事直播门户网站源码
  • 2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计
  • 学习编程对英语要求高吗?
  • 使用 Django 和 RabbitMQ 构建高效的消息队列系统
  • Pycharm常见问题1
  • 开发一个comfyui的自定义节点
  • Prime算法构造最小生成树(加点法)
  • 【VTKExamples::Utilities】第五期 CommandSubclass
  • 重生之 SpringBoot3 入门保姆级学习(04、 包扫描)
  • VectorDBBench在windows的调试
  • KAN(Kolmogorov-Arnold Network)的理解 1
  • Vue 项目中使用 Element UI库(Element UI 是一套基于 Vue.js 的桌面端组件库)
  • C++240527
  • 揭秘动态网页爬取:步骤与实战技巧