以下是 JavaScript 中的常见做法:
(function($) {
...code...
})(jQuery);
我了解包装器功能(它可以防止污染全局命名空间),但是许多库(如 jQuery、Underscore 等)已经在全局范围内定义了短名称($
和_
)供我使用。我想知道这种方法的优势是什么。只是为了重命名jQuery
为更短的名字?阻止我覆盖$
?以后更容易在另一个库中交换?我想这些对我来说似乎都没有说服力。
此外,我还看到了这个:
(function(_) {
...code...
})(_);
这里甚至没有重命名。我什至见过:
(function(global) {
...code...
})(this); // or window, perhaps
直接使用有什么问题window
?
所以这就是我要问的:
- 这种做法有名字吗?
- 这种做法有什么好处?
- 我应该总是传递我正在使用的库而不是直接使用它们吗?
- 我应该传入
this
还是window
作为对全局范围的引用?