0

我究竟将什么作为参数附加到函数#1?一个新对象,一个字符串,还是别的什么?它看起来不像是参考,因为更改 foo 没有任何效果。据我所见,bar1、bar2 和 bar 3 的行为完全相同。它们之间有区别吗?

foo = 5;

bar1 = (function(){return fooBar(foo);}()); // <--- #1
bar2 = (function(){return fooBar("5");}()); // <--- #2
bar3 = (function(){return fooBar(5);}());   // <--- #3

alert(bar1);
alert(bar2);
alert(bar3);

编辑 -> 根据要求,fooBar 函数

var p = 3;

function fooBar(n)
{
    return (p*n);
}

foo = 5;
bar = (function(){return fooBar(foo);}());

alert(bar);

编辑 2

function fooBar(n)
{
    return (n[0]+n[1]);
}

foo = [20, 15];
bar = (function(){return fooBar(foo);}());

foo = [4, 565];

alert(bar); // 35
4

2 回答 2

1

由于您的foo变量是全局变量(没有var在外部范围内定义关键字 / 定义),因此它也可以在您的匿名函数中使用。

然而,你的fooBar函数是未定义的,所以很难说出它在做什么。

此外,最好使用console.dir()转储变量,因为它还显示类型。

编辑:显然console.dir()不显示类型(至少在 Chrome 中)

于 2013-03-06T22:42:10.993 回答
1

bar1成为返回的结果fooBar(foo)isfooBar(5)并且计算结果为3*5, finally15

并且因为这 3 个语句被编写为自调用函数function(){ .... }(),所以在该语句之后更改 foobar1 = ...将无效,因为 foo 的值foo已经传递给它。

于 2013-03-06T22:43:51.760 回答