9

我试图了解以下之间是否有任何区别:

(function($){

...

})(jQuery);

对比

(function($){

...

})($);

请注意,jQuery 被替换为 $。这个可以吗?它是不是因为它不能工作而没有在任何地方使用?它有效,但也许它是非标准的?有人可以解释一下这是错误还是可以?谢谢

4

4 回答 4

15

其他 JavaScript 框架也可能使用 $ 作为快捷方式。为了保证 $ 在你的函数中是 jQuery,在最后传递 jQuery 而不是 $。这种定义函数或“代码区”的方式是为了确保在混合框架时 $ 确实是 jQuery。

于 2012-07-09T21:16:09.223 回答
6

许多 JavaScript 库使用 $ 作为函数或变量名,就像 jQuery 一样。在 jQuery 的例子中,$ 只是 jQuery 的别名,所以所有功能都可以在不使用 $ 的情况下使用。如果我们需要在 jQuery 旁边使用另一个 JavaScript 库,我们可以通过调用 $.noConflict() 将 $ 的控制权返回给另一个库:

http://api.jquery.com/jQuery.noConflict/

在“无冲突”模式下,$ 快捷方式不可用,使用较长的 jQuery。例如:

$(document).ready(function(){
     $(#somefunction) ...
});

变成:

jQuery(document).ready(function(){
    jQuery(#somefunction) ...
});

为了使用 $ 的默认 jQuery 快捷方式,您可以在代码周围使用以下包装器:

jQuery(document).ready(function($) {
    // $() will work as an alias for jQuery() inside of this function
});

该包装器将导致您的代码在页面完成加载时执行,并且 $ 将用于调用 jQuery。如果出于某种原因,您希望您的代码立即执行(而不是等待 DOM 就绪事件),那么您可以使用此包装器方法:

(function($) {
    // $() will work as an alias for jQuery() inside of this function
})(jQuery);

好读: http ://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_wrappers

进一步,如果你热衷:

jQuery 中的 $ 是什么意思?

这应该有助于解渴:)可能希望这会有所帮助!

于 2012-07-09T21:21:02.917 回答
1

有。
$只是 jQuery 的一个快捷方式。它没有定义库,因此它也可以被其他框架使用。
考虑这种情况:

// remove the jQuery shortcut ($ === undefined)
var j = jQuery.noConflict();
// redefine the dollar sign
window.$ = function(){
    // some other plugin
}

// case A
(function($){
   alert(jQuery === $);//true
})(jQuery)

 // case B
(function($){
   alert(jQuery === $);//false
})($)
于 2012-07-09T21:18:40.610 回答
1

你的第二个例子是多余的。如果你可以通过 jQuery 使用$then$已经是 jQuery,即你可以写:

(function(){
   $('#selectme');
})();

第一个例子,只有在你想在 noConflict 模式下使用 jQuery 时才值得,但仍然$在选择的代码片段中使用 jQuery 来引用。否则,从技术上讲,您甚至不需要闭包(尽管出于许多其他原因,闭包是一种很好的做法)。

于 2012-07-09T21:19:59.437 回答