为什么我不能返回箭头功能?

Seb*_*ian 3 javascript higher-order-functions ecmascript-6 arrow-functions

我在这里有一个高阶sorta函数.

虽然这按预期工作:

var square = (a) => a * a;

var callAndLog = (func) => {
  return function () {
    var res = func.apply(undefined, arguments);
    console.log("Result is: " + res);
    return res;
  }
};

var squareAndLog = callAndLog(square);

squareAndLog(5);  // Result is 25
Run Code Online (Sandbox Code Playgroud)

这里,当我返回一个箭头功能时,它不起作用:

var square = (a) => a * a;
var callAndLog = (func) => {
  return (() => {
    var res = func.apply(undefined, arguments);
    console.log("Result is: " + res);
    return res;
  })
};
var squareAndLog = callAndLog(square);
squareAndLog(5); // Result is NaN
Run Code Online (Sandbox Code Playgroud)

我知道箭头功能是松散的,这就是为什么我在这里尝试在parantheses中返回它().没有它们也行不通.

JLR*_*she 9

来自MDN:

箭头函数表达式具有比函数表达式较短的语法,并且不结合其自身的this,arguments,super,或new.target.

箭头函数不会将arguments对象绑定到它们的主体.您的函数依赖于使用arguments,因此它不能用作箭头函数.

如上面的评论中所建议的,您可以使用...args:

var square = (a) => a * a;
var callAndLog = (func) => {
  return (...args) => {
    var res = func.apply(undefined, args);
    console.log("Result is: " + res);
    return res;
  };
};
var squareAndLog = callAndLog(square);
squareAndLog(5); 
Run Code Online (Sandbox Code Playgroud)

我知道箭头函数是松散的,这就是为什么我在这里尝试在parantheses()中返回它.

将箭头函数括在括号中对其行为没有影响.它会有很少(如果有的话)情况.


ibr*_*rir 5

箭头函数没有arguments对象,您可以使用其余参数语法( ...) ,如下所示:

var square = (a) => a * a;
var callAndLog = (func) => {
  return ((...args) => {
    var res = func.apply(undefined, args);
    console.log("Result is: " + res);
    return res;
  })
};
var squareAndLog = callAndLog(square);
squareAndLog(5);
Run Code Online (Sandbox Code Playgroud)