0

为什么将参数传递给匿名函数会影响结果?例如,下面的脚本将 a1 显示为 a function(),将 a2 显示为数组。

var a1=(function(){return [1*2,2*2,3*2];});
var a2=(function(v){return [1*v,2*v,3*v];})(2);
console.log(a1,a2);

结果:

function() [2, 4, 6]
4

2 回答 2

2

因为对 a1 的所有分配都是创建一个匿名函数,但实际上并没有执行它。

对 a2 的分配会同时创建执行该函数,因为您之后添加了括号以实际调用它。

要创建等效代码,您需要这样的东西:

var a1=(function(){return [1*2,2*2,3*2];})(); <-- note the extra parens
var a2=(function(v){return [1*v,2*v,3*v];})(2);
console.log(a1,a2);
于 2013-10-07T17:42:40.870 回答
1

您的第一行代码从不调用该函数。

写作var a = function() { ... }会将函数本身分配给a.

您的第二行确实调用了该函数,就像任何其他函数调用一样,使用(2).

于 2013-10-07T17:42:08.333 回答