window.jQuery 还是 jQuery?

Posted

技术标签:

【中文标题】window.jQuery 还是 jQuery?【英文标题】:window.jQuery or jQuery? 【发布时间】:2013-03-28 17:41:02 【问题描述】:
(function($) 
// plugin code
)(window.jQuery);

好像这段代码的效果几乎一样,为:

(function($) 
// plugin code
)(jQuery);

我应该使用window.jQuery 还是jQuery 作为函数参数?有意义吗?

Zepto 也是如此,我看到很多人在他们的插件中使用 window.Zepto,但代码也仅适用于 Zepto

【问题讨论】:

【参考方案1】:

有区别。如果未定义 jQuery,!!window.jQuery 将返回 false,而如果未定义 jQuery,!!jQuery 将抛出错误。

【讨论】:

【参考方案2】:

没有区别,window是客户端javascript中的super全局对象,全局上下文中定义的所有函数和变量都是window的方法和属性对象。

【讨论】:

"窗口是全局对象"? @Beetroot-Beetroot 你的意思是我应该写 window is the global object 而不是 window is a global object 是的……嗯,这是一个建议。 @Beetroot-Beetroot 这是一个很好的建议,但我认为它可能会让一些读者感到困惑。一个全局对象,其他全局标识符是它的方法/属性! :) 有一个区别;如果 jQuery 不在页面上,则使用未完全解析的 jQuery 将引发错误,而 window.jQuery 将返回 undefined。所以...如果您正在测试是否存在 jQuery,那么您应该使用 window.jQuery 而不是 jQuery【参考方案3】:

window.jQuery 是在窗口全局对象中定义的对象。 window 可以跳过。当跳过它应该是我们window.jQuery。大多数人不使用 window.jQuery 而是使用jQuery 或简单地使用$ 并且更容易理解也减少了源代码大小。

window.jQuery = window.$ = jQuery;

您可以通过here阅读更多内容。

【讨论】:

【参考方案4】:

就像$(document).ready(function()..)$(function()..) 一样。

用于设置 jQuery 闭包。其目的是允许变量 $ 用作 jQuery 的快捷方式,而不会与也使用 $ 作为变量名的其他库和自定义函数发生冲突

jQuery 插件作者经常使用这种技术来授权他们的插件。更多信息请查看documentation。

【讨论】:

以上是关于window.jQuery 还是 jQuery?的主要内容,如果未能解决你的问题,请参考以下文章

window.onload多个共存 - 借鉴jQuery.noConflict的思路

学会做个jQuery

jquery noConflict详解

01.一天一点JQUERY源码——定义函数

jquery的封装

jQuery命名空间无冲突