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

时间:2017-04-03 20:36:34

标签: javascript ecmascript-6 higher-order-functions 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

这里,当我返回一个箭头功能时,我没有工作:

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

我知道箭头功能是松散的,这就是为什么我尝试在parantheses ()内返回它的原因。没有它们也无法工作。

2 个答案:

答案 0 :(得分:9)

来自MDN

  

箭头函数表达式的语法短于函数表达式,并且不绑定自己的thisargumentssupernew.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); 




  

我知道箭头功能是松散的,这就是我尝试在parantheses()中返回它的原因。

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

答案 1 :(得分:4)

箭头功能没有arguments对象,您可以使用rest parameter syntax...),如下所示:

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