代码之家  ›  专栏  ›  技术社区  ›  Shankar Shastri

javascript中箭头函数与函数的行为差异[重复]

  •  5
  • Shankar Shastri  · 技术社区  · 6 年前

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

    箭头功能:

    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编译来理解差异,但看起来行为不同,如下所示:

    巴贝尔输出:

    "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 回复  |  直到 6 年前
        1
  •  9
  •   Robby Cornelissen    6 年前

    两个结果都是一样的

    不,他们不是。


    从第一行开始 MDN 箭头功能页(强调我的):

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

    在同一页下面:

    箭头函数没有自己的 论据 对象。因此,在 这个例子, 论据 仅仅是一个 引用 封闭范围 [……]

    而在 ECMAScript specification :

    注意:箭头函数从来没有参数对象。 (碳化硅)