为什么将匿名函数传递给map
函数,但尝试传递函数表达式会引发错误?
arr = [2,4,6,8];
items = arr.map(function(x) {
return Math.pow(x, 2);
});
console.log(items); // Returns [4, 16, 36, 64]
squareIt = function(x) {
return Math.pow(x, 2);
}
otherItems = arr.map(squareIt(x));
console.log(otherItems); // Returns "Uncaught ReferenceError: x is not defined"
答案 0 :(得分:2)
你应该自己传递这个功能
arr.map( squareIt );
如果您使用squareIt(x)
,则直接调用该函数并将其返回值作为参数传递。
在您的情况下,由于调用函数
时未定义x
,因此会出现其他错误
答案 1 :(得分:0)
传递函数可以正常工作,但是当你在pass参数中使用()
时,它会立即调用函数:
otherItems = arr.map(squareIt(x)); <---Invoked immediately!
正确的方法是使用匿名函数并使用参数调用函数:
otherItems = arr.map(function() {
squareIt(x);
});
答案 2 :(得分:0)
这是因为函数表达式会立即执行。所以当它试图调用SquareIt(X)时,它找不到X,因此你得到异常"Uncaught ReferenceError: x is not defined"
。尝试在通话前定义X,比如x = 4;
然后你会得到一个例外
Uncaught TypeError: 16 is not a function
因为Map函数需要函数作为参数,而不是整数。
当你通过()
传递函数时,你有点传递回调。