在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