如果使用jQuery的
$(function() { ... })
添加功能被執行時,DOM是準備有2個或3或20的語句,將所有這些功能並行運行或按順序運行?
如果使用jQuery的
$(function() { ... })
添加功能被執行時,DOM是準備有2個或3或20的語句,將所有這些功能並行運行或按順序運行?
document.ready
行爲就像在這方面的一個正常事件,它們發生在他們被束縛順序的序列和。你可以看到the relevant jQuery core source here:
這是當你做$(function)
會發生什麼:
ready: function(fn) {
jQuery.bindReady();
if (jQuery.isReady) {
fn.call(document, jQuery);
} else if (readyList) {
readyList.push(fn);
}
return this;
}
而這之後發生的,當 「準備就緒」 事件觸發:
if (readyList) {
var fn, i = 0;
while ((fn = readyList[ i++ ])) {
fn.call(document, jQuery);
}
readyList = null;
}
如果文檔的已經就緒,該功能立即執行,即上面第一個代碼塊中的if
部分。
它們將按順序運行。你可以把斷點螢火看到這種行爲
我不認爲使用斷點是一個確鑿的測試。例如,您可以在Eclipse中爲多個線程放置斷點,並且調試器將停止在每個斷點處。區別因素是當前正在執行的線程被列出。如果情況並非如此,那麼如果代碼以線程化方式執行,則無法輕易說出。 – Anurag 2010-07-20 22:47:59
它們將按順序運行。 Javascript代碼不能並行運行。
在這種情況下,這是真的,但作爲一個總括聲明它不*完全*真實的,[bobince](http://stackoverflow.com/users/18936/bobince )在這裏對異常做了很好的寫作:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded – 2010-07-20 22:45:19
@Nick:看起來更像是執行被某些事件中斷案件,而不是實際並行運行。 – Guffa 2010-07-20 23:02:44
Javascript代碼不能並行運行?如果你每0.1秒有2個'setInterval()'一個,每0.11秒另一個呢,那麼2個函數在某個點上不會並行運行? (比如2個線程) – 2010-07-20 23:10:04
基於上面的代碼,它看起來像文檔一旦準備就緒,您不能再添加到隊列的末尾 - 所有新的就緒處理程序將立即執行。這意味着它不是完全綁定的順序,因爲準備好後的綁定會立即執行。 – 2011-02-01 17:32:54
@肖恩 - 他們仍然在命令:) – 2011-02-01 18:01:29