nyc*_*nik 7 javascript jquery closures
最近我正在阅读其他人的代码,并且遇到了这个问题:
// Semicolon (;) to ensure closing of earlier scripting
// Encapsulation
// $ is assigned to jQuery
;(function($) {
// DOM Ready
$(function() {
...
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我理解领先的观点;,我理解$(function(){与文档准备相同,但添加函数($)的重点是什么?
我知道它是一个闭包,但由于这个在全局范围内被调用,所以看起来你不需要为此烦恼.$(function(){将使用相同的全局对象,不是吗?
它是为了防范某些事情,还是出于其他原因的最佳做法?
Jam*_*ice 12
这是jQuery插件的常见结构.它可以防止$标识符被覆盖并用于其他内容.在匿名函数内部,$总是会引用jQuery.
例:
$ = "oh no";
$(function() { //Big problem!
//DOM ready
});
Run Code Online (Sandbox Code Playgroud)
通过引入新范围,您可以确保$引用您期望的范围:
$ = "oh no";
(function($) { //New scope, $ is redeclared and jQuery is assigned to it
$(function() { //No problem!
//DOM ready
});
}(jQuery));
Run Code Online (Sandbox Code Playgroud)
这背后的主要原因是许多其他JavaScript库$用作标识符(例如PrototypeJS).如果你想同时使用Prototype和jQuery,你需要让Prototype拥有它的$标识符,但是你可能不希望jQuery每次想要调用jQuery方法时都写出来.通过引入一个新的作用域,您可以让jQuery $在该执行上下文中获得回报.
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |