我在这里有一个更高阶的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 ()
内返回它的原因。没有它们也无法工作。
答案 0 :(得分: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);

我知道箭头功能是松散的,这就是我尝试在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);