Javascript中箭头函数与函数的行为差异

时间:2018-06-18 03:53:56

标签: javascript arrow-functions

我想了解正常函数与箭头函数的行为。

箭头功能



function arrowFunc() {
  return () => arguments
}


console.log(arrowFunc(1, 2, 3)(1))




正常功能



function normalFunc() {
  return function() {
    return arguments
  }
}

console.log(normalFunc(1, 2, 3)(1))




两个结果都是相同的,但看起来像上面定义的arrowFunc考虑第一个arg列表,其中normalFunc考虑第二组arg列表。

还尝试了babel-compilation来理解差异,但看起来行为有所不同,如下所示:

Babel输出:



"use strict";

function arrowFunc() {
  var _arguments = arguments;

  return function() {
    return _arguments;
  };
}

console.log(arrowFunc(1, 2, 3)(1));

function normalFunc() {
  return function() {
    return arguments;
  };
}

console.log(normalFunc(1, 2, 3)(1));




1 个答案:

答案 0 :(得分:9)

  

预计结果都相同

不,他们不是。

从箭头函数的MDN页面的第一行(强调我的):

  

箭头函数表达式的语法短于函数   表达式,没有自己的this arguments super或   new.target

然后在同一页面上:

  

箭头函数没有自己的arguments对象。因此,在   在这个例子中,arguments只是对的参数的引用   封闭范围 [...]

ECMAScript specification

  

注意:箭头函数永远不会有参数对象。 (原文如此)