Map函数:匿名函数与函数表达式

时间:2013-10-03 13:14:56

标签: javascript

为什么将匿名函数传递给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"

3 个答案:

答案 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函数需要函数作为参数,而不是整数。

当你通过()传递函数时,你有点传递回调。