Furthermore,变量可以传递给匿名包装器来本地化常用的全局变量,例如window,document和jQuery ......
var module = (function (window, document, $) {
// module stuff
})(window, document, jQuery);
如果这些本地化是全球可访问的,那么本地化的重点是什么?
答案 0 :(得分:4)
我想说它确保查找稍快一些,因为它在本地范围内,但在缩小时也会缩小文件大小。参数“窗口”和“文档”可以缩小,但不能缩小全局变量。
$经常被其他库(原型)覆盖,所以这样它确保$指向传入参数的真实jQuery。
请注意,有些还添加了'undefined'参数,因为它在ECMAScript 3中是可变的(不再在ES5中)。
请参阅jQuery样板的注释:https://github.com/jquery-boilerplate/jquery-boilerplate/blob/master/dist/jquery.boilerplate.js
答案 1 :(得分:2)
将变量传递到模块中以对其进行本地化将会产生更快的查找时间,如果我没有记错的话,因为它们在本地范围内。
此外,它确保$
确实是jQuery
库。它可以保护$
免受其他用途的污染。
答案 2 :(得分:2)
答案 3 :(得分:1)
全局变量是已知的anti pattern。本地化全局变量可以最大限度地减少使用全局变量的简历。
这也与DI有关。例如:如果您有10个模块,并且您希望其中一个模块使用jQuery的替代品,例如, zeptojs。如果你的所有模块都使用全局jQuery或$你就不能这样做。
明确地公开您的依赖关系也很好,这是通过这种本地化技术实现的。它增加了readbiltiy并减少了耦合。