# 箭头函数
# 什么是箭头函数
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
什么是匿名函数
# 区别
- 没有 this 、 super、arguments、也没有 new.target 绑定
- 不能被使用 new 调用 : 箭头函数没有 [[Construct]] 方法, 因此不能被用作 构造函数, 使用 new 调用箭头函数会 抛出错误
- 没有原型: 既然不能对箭头函数使用 new, 那么它也不需要原型,也就没有 prototype 属性
- 不能更改 this,this 的值在函数内部不能被修改,箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this
- 没有 arguments 对象 必须依赖于具名参数或 剩余参数来访问函数的参数。
- yield 关键字通常不能在箭头函数中使用
- 不允许重复的具名参数
没有 arguments 绑定
尽管箭头函数没有自己的 arguments 对象,但仍然能访问包含它的函数的 arguments 对 象。无论此后箭头函数在何处执行,该对象都是可用的。例如:
function createArrowFunctionReturningFirstArg() {
return () => arguments[0];
}
var arrowFunction = createArrowFunctionReturningFirstArg(5); console.log(arrowFunction()); // 5
在大多数情况下,使用剩余参数是相较使用arguments对象的更好选择。
function foo(arg1,arg2) {
var f = (...args) => args[1];
return f(arg1,arg2);
}
foo(1,2)
仍然可以对箭头函数使用 call() 、 apply() 与 bind() 方法,虽 然函数的 this 绑定并不会受影响
var sum = (num1, num2) => num1 + num2; console.log(sum.call(null, 1, 2));
console.log(sum.apply(null, [1, 2])); var boundSum = sum.bind(null, 1, 2); console.log(boundSum());
空的箭头函数返回 undefined