我正在使用 Magento 网站。我在让 Magento 的prototype.js 与 jQuery 很好地配合时遇到了问题。我读到我所有的 jQuery 都需要使用 jQuery.noConflict();我已经完成了,但仍然遇到一些问题。我看到一些函数右括号后面跟着 (jQuery)。
我想知道这是做什么的,是否需要将其更改为 (jQuery.noConflict())?
最佳答案
只要 jQuery.noConflict()
是,就不需要将 (jQuery)
更改为 (jQuery.noConflict())
在此之前调用(并且在包含 JQuery 库之后)。
如您所知,当您在无冲突模式下使用 jQuery 时,应该使用 jQuery
而不是 $
。
但是您可以在放置在立即调用函数表达式 (IIFE) 内的代码中使用 $
而不是 jQuery
,如下所示:
(function($) {
// Code here can use $, instead of jQuery.
})(jQuery);
IIFE 是您定义匿名函数并立即调用它的地方。在上面的代码中,jQuery
对象作为参数传递给匿名函数,并且由于该参数名为 $
,因此 $
代表函数内的 jQuery
对象。
此外,jQuery
对象作为第一个参数传递给文档就绪事件的回调函数,因此您可以执行以下操作:
jQuery(function($) {
// Code here can use $, instead of jQuery.
});
这与:
相同jQuery(document).ready(function($) {
// Code here can use $, instead of jQuery.
});
请注意,在 IIFE 内用 var
声明的变量不是全局的。这通常是一件好事,也是使用 IIFE 的另一个原因。如果您确实想在 IIFE 内声明全局变量,则应将其作为 window
对象的属性进行引用。
<script type="text/javascript">
var a = 1; // This is a global variable.
(function($) {
var b = 2; // This is NOT a global variable.
window.c = 3; // This is a global variable.
})(jQuery);
<script>
关于javascript - 为什么 (jQuery) 在函数右括号之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30110953/