我想了解是否有任何区别:
(function($){
...
})(jQuery);
VS
(function($){
...
})($);
注意jQuery被替换为$。这个可以吗?它不能在任何地方使用,因为它无法工作?它可以工作,但也许是非标准的?有人可以解释一下这是错误还是可以? 感谢
答案 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
如果你热衷于:
这应该有助于解渴[{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,这是值得的。否则,你在技术上甚至不需要关闭(尽管由于许多其他原因,闭包是很好的做法)。