在JavaScript中,将一组参数传递给一个函数调用该函数,它将被计算为函数的返回值。
var test = function() { return 1; } // Creates a new function that returns 1
alert(test.toString()); // => "function() { return 1; }"
alert(test().toString()); // => "1"
即使alert
本身只是一个指向函数的变量。
alert(alert); // => "function alert() { [native code] }"
因此,如果第一个例子中,主叫runSomething()
时,它会立即评估该功能,随后将返回值作为参数来bind()
。你的情况,它的evals alert()
作为加载页面时,然后传递到undefined
bind()
在第二示例中,使用本身被传递到bind()
可变runSomething
的功能。只有当事件发生后,绑定才会使用该函数。
要真正打击你的心,你可以有函数返回一个函数,然后计算函数(如在你的第一个例子)是正确的......例如
var counter = 0;
function GenerateNext() {
counter++;
return new Function("alert(" + counter + ")");
}
a = GenerateNext();
b = GenerateNext();
b() // will alert 2
a() // will alert 1
$(selector).bind('event', GenerateNext()); // alert 3
$(selector).bind('event', a); // alert 1
$(selector).bind('event', b); // alert 2
这只是一切都取决于什么你正在努力去做;传递函数本身,或传递函数的返回值。
那么在第二个版本中,东西不会发生? – JSNewbie 2010-06-28 16:37:14
@JSNewbie:第二个版本在事件上运行函数,而第一个版本在事件发生时运行绑定时由函数返回的内容。 – tcooc 2010-06-28 16:40:10
抱歉太理论了,我不明白。有人可以根据我的实际例子来解释。 – JSNewbie 2010-06-28 16:44:18