为什么每个 jquery 插件都用 (function($) {})(jQuery); 包装
每当我看到这样的 jQuery 插件时:
(function($) {
$.fn.example = function(options) {
return this.each(function() {
return 'Example!';
});
}
})(jQuery);
我就想知道包装功能:
(function($) {
// ...
})(jQuery);
有必要吗?如果是,为什么?如果没有,替代方案/优点是什么?
every time when I see a jQuery plugin like this:
(function($) {
$.fn.example = function(options) {
return this.each(function() {
return 'Example!';
});
}
})(jQuery);
I am wondering about the wrapping function:
(function($) {
// ...
})(jQuery);
Is it necessary? If yes, why? And if not, what are the alternatives/advantages?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这样做是为了确保插件在它自己的范围内并且不会干扰任何东西。
许多库使用
$
作为快捷方式,因此我们传递jQuery
并将其分配为$
以确保它不会干扰。jQuery 在他们的文档中解释了它的用法: http://docs.jquery.com/Plugins/Authoring
It's done this way to ensure the plugin is in its own scope and doesn't interfere with anything.
A lot of libraries use
$
as their shortcut, so we're passingjQuery
and assigning it as$
to make sure it doesn't interfere.jQuery explains its use in their docs: http://docs.jquery.com/Plugins/Authoring
同意火箭的评论。来自 http://docs.jquery.com/Plugins/Authoring :
这也有助于尊重全局命名空间/防止全局命名空间命名空间污染。除非您尝试 - 例如,通过向
window
分配某些内容 - 您创建的任何变量都将保留在您的函数的本地 - 并且您不需要担心与任何其他代码的命名冲突 - 在其他 jQuery 插件或其他 - 包括使用$
。Agreed with Rocket's comment. From http://docs.jquery.com/Plugins/Authoring :
This also helps to respect the global namespace / prevent global namespace pollution. Unless you try to - by assigning something to
window
, for example - any variables you create will be kept local to your function - and you don't need to worry about naming conflicts with any other code - in other jQuery plugins or otherwise - including the use of$
.这基本上是为了给插件一个闭包,其中 $ 符号不会与旁边使用的其他库发生冲突。
This is basically done to give plugin the closure where $ sign doesnt collides with rest of the libraries used along side.