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

bar1fooBar(foo)which isから返される結果になり、最終的に にfooBar(5)評価されます3*515

また、これら 3 つのステートメントは自己呼び出し関数として記述されているためfunction(){ .... }()、そのステートメントの後で foo を変更しても、 の値が既に渡されているbar1 = ...ため、効果はありません。foo

于 2013-03-06T22:43:51.760 に答える