2012-04-19 51 views
3

我最近寫了我的第一個簡單的jQuery插件。我很自豪。jQuery插件如何保持全局狀態?

http://jsfiddle.net/johnhoffman/wSeLY/1/

(function($) { 
    $.fn.makeRed = function() { 
     return this.each(function() { 
      $(this).css("color", "#f00"); 
     }); 
    } 
})(jQuery); 

我很奇怪,爲什麼它的工作原理,但。我將jQuery對象傳遞到這個立即運行的函數中。

隨後,不是| $ |在該匿名函數中對象一個局部變量?它如何改變全局單例jQuery對象?

換句話說,是不是我只是通過$.fn.myFunctionName添加一個函數到對象| $ |本地的封閉功能?它如何改變全局jQuery對象,並使我的函數(makeRed)可用於遍佈全局腳本的選擇器?

+0

閱讀關閉如何工作。 – Interrobang 2012-04-19 06:42:25

回答

2

不是| $ |在該匿名函數中對象一個局部變量?

是,$是函數的局部變量,但是,這是一個很大的,但是,它是對jQuery對象是全局可訪問的參考。事情是這樣的:

window.jQuery (global) ----->-----> { ... } 
            ^
            | 
$ (local) ------------------>-------+ 

所以,你有兩個變量指向同一個對象,你的匿名函數被調用後該對象仍然存在。

2

Javascript中的對象通過引用傳遞,因此函數中的任何更新都保留在jQuery對象上。您只是以名稱$來指代它。

我強烈建議你閱讀:Javascript: The Good Parts它解釋了這一切。