箭头函数是 ES6 引入的一种新的函数声明方式,具有以下几个特点:
1.简洁语法:
使用 => 表示函数定义,如 (param1, param2) => expression 或 () => { statements }。
如果函数体仅包含一个表达式且无需额外的代码块,可以省略大括号 {},此时返回值为该表达式的计算结果。
2.自动返回:
当函数体只有一条语句时,可以省略 return 关键字和花括号。例如:x => x * x 相当于 function(x) { return x * x; }。
3.this绑定:
箭头函数不创建自己的 this 值,它会捕获其所在上下文(lexical context)的 this 值。这意味着箭头函数没有独立的 this 指向,无论以何种方式调用,this 的指向都是固定的,这与普通函数不同,普通函数的 this 值是在运行时动态绑定的,而箭头函数的 this 值是词法上确定的,即箭头函数定义时所在的作用域中的 this 值,而不是执行时的作用域。
4.无arguments对象:
箭头函数没有自己的 arguments 对象,不能通过 arguments 访问传入函数的参数。如果需要访问所有参数,必须显式使用剩余参数语法 (...args)。
例如在箭头函数中使用剩余参数:
const add=(a,b,...args)=>{
console.log(args,'args');//[3, 4, 5]
return a+b+args.reduce((pre,cur)=>pre+cur,0)
}
console.log(add(1,2,3,4,5))//15
5.无法作为构造函数:
因为箭头函数没有 [[Construct]] 内部方法,因此不能使用 new 关键字来调用,所以它不能被用作构造函数。
6.不支持call、apply和bind方法改变this:
箭头函数中的 this 不可变,因此 call(), apply() 和 bind() 方法对箭头函数无效,它们无法更改箭头函数内部 this 的指向。
7.无原型属性:
箭头函数没有 prototype 属性,因为它们不是构造函数。
8.参数处理:
若箭头函数只有一个参数,则可以省略参数小括号 ();如果有多个参数或者没有参数,则必须使用括号包裹起来。例如:单一参数 => 单一处理,多个参数 => (param1, param2) => 处理,无参数 => () => 表达式或语句块。
9.箭头函数不能使用 yield 关键字用作生成器函数。