# 箭头函数

# 什么是箭头函数

箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。

什么是匿名函数

# 区别

  • 没有 thissuperarguments、也没有 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

更新时间: 9/23/2020, 8:35:12 PM