2012-08-02 78 views
1

我創建了一些我想從全局命名空間隱藏的自定義對象和函數(包括限制其可訪問性)。jquery - 命名空間和關閉

如果我把它放在document.ready函數中,它會和放在Closure中一樣有效,還是我需要在document.ready聲明中別名jquery引用,以確保我的自定義代碼不在全局名稱空間中?

選項1.普通文檔準備

$(document).ready(function() 
    //do custom stuff 

選項2:裏面的文件準備關閉

$(document).ready(function(){ 
     (function($) { 
     //do custom stuff 
     })(jQuery); 

方案3:別名文件jQuery的參考準備

jquery(document).ready(function($) { 
    //do custom stuff 

會是什麼是首選嗎?謝謝

回答

2

如果你在任何函數中聲明變量,它們將只在該函數中可見。

此外,以確保你在你的範圍內正確$,我會去選擇3(但更正函數名從jqueryjQuery)。選項1和2已經假定$是正確的別名,但選項3將在外部範圍工作,即使是$不一樣jQuery(例如,如果jQuery.noConflict()叫,或另一個庫加載等的Prototype.js等),但使$始終意味着jQuery在你的內部範​​圍,你//do custom stuff

3

你必須明白,每個函數在ECMAscript中都是有效的閉包。所以,它在你的特定片段中並沒有真正的區別,在這個片段中,你創建了這些變量的函數(-context)(除了來自其他上下文的可訪問性之外)。

1

在JavaScript中,每個函數都有自己的作用域,在函數內聲明的任何對象或變量只會被函數本身或其內部聲明的其他函數看到。

創建名稱空間的最常見方法是創建一個函數,該函數在其定義後自動調用,並返回一個將包含數據的對象,就像在第二個選項中一樣。然後可以通過該對象訪問所有數據。無論如何,如果你只想隱藏代碼中其他部分的變量,只需創建一個函數並聲明你想隱藏的所有內容。