jQuery插件如何维护全局状态

How do jQuery plugins maintain global state?

本文关键字:维护 全局 状态 插件 何维护 jQuery      更新时间:2023-09-26

我最近写了我的第一个简单的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 ) 可用于脚本全局范围内的选择器?

|$| 对象不是该匿名函数中的局部变量吗?

是的,$ 是函数中的局部变量,但是,这是一个很大的但是,它是对全局可访问的jQuery对象的引用。事情看起来像这样:

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

因此,您有两个指向同一对象的变量,并且在调用匿名函数后该对象仍然存在。

Javascript 中的对象是通过引用传递的,因此函数中的任何更新都保留在 jQuery 对象上。你只是用名字来指代它 $ .

我强烈建议你阅读:Javascript:The Good Parts,它解释了这一切。