在iife中理解$ vs. jQuery而不是$

时间:2012-07-09 21:14:06

标签: jquery iife

我想了解是否有任何区别:

(function($){

...

})(jQuery);

VS

(function($){

...

})($);

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

4 个答案:

答案 0 :(得分:15)

其他JavaScript框架也可以使用$作为快捷方式。为了保证$是函数内部的jQuery,最后传递jQuery而不是$。这种定义函数或“代码区域”的类型是确保在混合框架时$ is真的是jQuery。

答案 1 :(得分: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 ready事件),那么您可以使用此包装方法:

(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

如果你热衷于:

What does $ mean in jQuery?

这应该有助于解渴[{1}}可能希望这会有所帮助!

答案 2 :(得分:1)

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

// 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
})($)

答案 3 :(得分:1)

你的第二个例子是多余的。如果你可以使用$传递jQuery,那么$已经是jQuery了,也就是你刚才写的:

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

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