jQuery插件如何维护全局状态
How do jQuery plugins maintain global state?
我最近写了我的第一个简单的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,它解释了这一切。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 正在全局范围中查找JavaScript函数
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 全局对象是属于哪个类的对象
- Javascript全局onclick监听器
- 从Javascript方法返回全局变量
- 访问jsrender模板中的全局javascript变量并更新它
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- cordova:例外:财产'requestFileSystem'的[对象全局]不是函数
- 全局安装gull后出错
- AngularJS中的封装窗口全局变量
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 全局标志仅与第一个匹配项匹配的Regexp
- javascript隐式全局变量
- 如何在不让web组件的原型进入全局命名空间的情况下维护它们之间的依赖关系
- jQuery插件如何维护全局状态
- 如何跨站点维护全局变量.