为什么我们本地化全局库/引用?

时间:2014-08-26 03:23:46

标签: javascript design-patterns

  

Furthermore,变量可以传递给匿名包装器来本地化常用的全局变量,例如window,document和jQuery ......

var module = (function (window, document, $) {
    // module stuff
})(window, document, jQuery);

如果这些本地化是全球可访问的,那么本地化的重点是什么?

4 个答案:

答案 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)

除了提供更好的微型化和避免名称冲突之外,局部变量的查找速度要快得多:

enter image description here

http://jsperf.com/local-variable-scope

答案 3 :(得分:1)

全局变量是已知的anti pattern。本地化全局变量可以最大限度地减少使用全局变量的简历。

这也与DI有关。例如:如果您有10个模块,并且您希望其中一个模块使用jQuery的替代品,例如, zeptojs。如果你的所有模块都使用全局jQuery或$你就不能这样做。

明确地公开您的依赖关系也很好,这是通过这种本地化技术实现的。它增加了readbiltiy并减少了耦合。