为什么(jQuery)在函数关闭括号之后

时间:2015-05-07 20:20:49

标签: javascript jquery magento prototypejs

我正在使用Magento网站。我遇到了一个让Magento的prototype.js与jQuery玩得很好的问题。我已经读过我所有的jQuery都需要使用jQuery.noConflict();我已经完成但仍有一些问题。我已经看到一些关闭括号的函数后跟(jQuery)。

我想知道这是为了什么,如果我需要将其更改为(jQuery.noConflict())?

1 个答案:

答案 0 :(得分:3)

只要在该点之前(以及包含JQuery库之后)调用(jQuery),就无需将(jQuery.noConflict())更改为jQuery.noConflict()

如您所知,当您在非冲突模式下使用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>