首页 > 解决方案 > 箭头函数与 Javascript 中的函数的行为差异

问题描述

我想了解普通函数与箭头函数的行为。

箭头功能:

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

通天塔输出:

"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));

标签: javascriptarrow-functions

解决方案


预计两个结果都相同

不,他们不是。


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

箭头函数表达式的语法比函数表达式短,并且没有自己的thisargumentssupernew.target

在同一页面下方:

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

ECMAScript 规范中:

注意:箭头函数从来没有参数对象。(原文如此)


推荐阅读