2013-06-12 78 views
-5

之間的區別,我已經看到了使用這兩種開發商:是什麼就是什麼這兩者之間的區別兩種功能

這一個:

$(document).ready(function(){ 
    console.log("on load"); 
    }); 

這一個:

(function() { 
    console.log("self properling"); 
    })(); 

如果有人比另一人有什麼優勢?

+5

一個是當DOM就緒的觸發,另一種是一個自調用函數。 – deceze

+0

而重複是錯誤的。沒有'$'! – deceze

+1

答案是重複的,與這個不一樣。注意第二個例子是一個自調用函數,而不是jQuery DOM準備簡寫'(function(){/ * ...* /});' –

回答

3

是有區別的,一旦DOM就緒

(function() { 
    console.log("self properling"); 
    })(); 

是執行annonymous功能的自

$(document).ready(function(){ 
    console.log("on load"); 
    }); 

將執行,也不會等待DOM已準備就緒事件

+3

我認爲一個更好的術語來描述第二種情況是立即調用函數表達式 - cf. http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – adhocgeek

+1

誰低估了這個?這完全正確。 –

+2

@RoryMcCrossan我已經學會了忽略那些瘋狂的選民 –

4

DOM準備就緒已讀取文檔並準備好進行操作(PS Uncached Images still正在加載)

$(document).ready(function(){ 

}); 

DOM準備速記

$(function(){ 

}); 

安全jQuery別名($)DOM準備速記防止$別名與其他腳本衝突

jQuery(function($){ 

}); 

安全jQuery別名($)+自調用(DOM沒有準備好)

(function($){ 

})(jQuery); 

立即調用函數表達式

(function myName(){ 

})(); 

命名函數聲明

function myName(){ 

} 

存儲在變量匿名功能:

var myName = function(){ 

}; 

存儲在變量命名函數:

var myName = function myFun(){ 

}; 
+0

你必須小心謹慎:*「立即自我調用函數(匿名)」*中的第二個例子本身是無效的JavaScript。它被評估爲函數聲明,並且必須具有名稱。你的*「命名函數(存儲在變量中)」*例子實際上是一個存儲在變量中的匿名函數。命名函數總是形式爲'function name(){...}'。函數*聲明*總是被命名的,而函數*表達式*可以是匿名的或命名的。 –

+1

現在看起來不錯:) –

相關問題