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