2011-06-30 77 views
2

我有一個想法,以做這樣的事情:我應該在自執行函數中包裝jQuery文檔嗎?

(function(window, undefined){ 
    $ = window.jQuery; 
    $(function(){ 
     // Do some stuff 
    });  
})(this); 

你會認爲這是很好的做法還是壞事?它對jQuery(document).ready()何時會觸發有什麼影響?

+2

確實沒有意義。該庫已經將您對全局jQuery對象的引用作爲「ready」函數的第一個參數傳遞給您。 – Pointy

+0

你知道在你的例子中'$'是全局的嗎?你可以省略直接函數,並且你也有同樣的效果。 –

+0

是的,我知道$是全球性的,我主要是在尋找關於將即時功能作爲練習包裝的意見。感謝您指出它。 – Cros

回答

6

我只會說如果你有一些JavaScript運行之前 DOM準備就緒,你不想污染全局命名空間。

(function(window, undefined){ 
    var $ = window.jQuery; 

    // create some variables and/or functions that shouldn't be global 
    // ...and do some work before the "ready()" fires 
    var a = 'some value'; 
    function b() { 
     // do some important stuff 
    } 
    var c = b(); 

    // Maybe set up a `.live()` handler, which doesn't rely on DOM ready. 
    $('.someSelector').live(function() { 
     // Some handler code. 
     // This works before DOM is ready. 
    }); 

    $(function(){ 
     // Your DOM ready code 
    });  
})(this); 
3

不需要。使用自我可執行函數創建一個範圍,使得您在該範圍內創建的變量不會成爲全局變量。

var a = 'Hi'; 
alert(window.a); // "Hi" 

(function() { 
    var a = 'Hi'; 
})(); 
alert(window.a); // "undefined" 

在jQuery的情況下,它不是必需的。 ready函數已經創建了一個範圍。

相關問題