2011-08-28 56 views
7

之前就聽說關於自我執行功能我總是要做到這一點:自執行函數是否在dom準備好運行?

$(document).ready(function() { 
    doSomething(); 
}); 

function doSomething() 
{ 
    // blah 
} 

會自我執行功能有同樣的效果?它會在dom上運行嗎?

(function doSomething($) { 
    // blah 
})(jQuery); 
+0

可能重複http://stackoverflow.com/questions/3259496/jquery-document-ready-vs-self-calling-anonymous-function ) –

回答

9

沒有。一個自執行函數在Javascript引擎找到它時運行。但是,如果您在關閉</body>標記(即highly recommended)之前將所有代碼放在文檔末尾,那麼您無需等待DOM準備就緒,因爲您已經自動完成了DOM準備。


如果你想要的是你的範圍變數$,你不希望你的代碼移動到頁面的底部,您可以使用此:

jQuery(function($){ 
    // The "$" variable is now scoped in here 
    // and will not be affected by any code 
    // overriding it outside of this function 
}); 
1

它贏得了」 t,它將在JavaScript文件執行後立即運行。

0

不,自執行javascript函數在那裏運行。

如果你想創建一個DOM準備功能,寫:

$(function() { 
    // this will run on DOM ready 
}); 

這是一個速記:

$(document).ready(function() { 
}); 
0

沒有,自動執行功能立刻在運行「在你的代碼中聲明「。即使它位於外部.js文件中。

在你的榜樣,還有你的函數將執行的可能性和jQuery的未定義值。如果你想成爲domready中執行代碼,繼續使用

$(document).ready(function(){ 
    doSomething(); 
}); 

$(function(){ 
    doSomething(); 
}); 

甚至

window.onload = function(){ 
    doSomething(); 
} 
+1

這是onLoad,這不等同於DOM就緒! –

+0

@KARASZI是對的。 onLoad之前DOM Ready會觸發。 onLoad只會在所有內容加載時啓動(圖片等):https://developer.mozilla.org/en/DOM/window.onload。 –

0

$(document).ready(function() { ... });只需綁定該函數將文檔的準備情況,所以,如你所說,當文檔加載時,事件觸發。

(function($) { ... })(jQuery); 

實際上是JavaScript的一個構建體,以及所有的代碼段的作用是通過jQuery對象入函數($)作爲參數,並運行該函數,使得函數內部,$始終指的jQuery目的。這可以幫助解決命名空間衝突等。

所以#1,而#2立即運行加載該文件時執行,與名爲$速記jQuery對象

$(document).ready(function(){ ... }); or short $(function(){...}); 

當DOM準備就緒,這意味着這個函數被調用,你例如可以開始查詢元素。 .ready()將在不同的瀏覽器上使用不同的方式來確保DOM真的準備就緒。

(function(){ ... })(); 

這不是別的,一旦調用自身的可能時,瀏覽器解釋你的ECMA-/ JavaScript的功能。因此,您不可能在這裏成功地處理DOM元素。

jQuery document.ready vs self calling anonymous function

[jQuery的的document.ready VS自調用匿名函數(的
+0

請使用代碼和鏈接按鈕 –

+0

代碼和鏈接按鈕? –

+0

是的,如果你不處於移動模式,他們會在發佈'textarea'之上。 –