我试图了解以下之间是否有任何区别:
(function($){
...
})(jQuery);
对比
(function($){
...
})($);
请注意,jQuery 被替换为 $。这个可以吗?它是不是因为它不能工作而没有在任何地方使用?它有效,但也许它是非标准的?有人可以解释一下这是错误还是可以?谢谢
其他 JavaScript 框架也可能使用 $ 作为快捷方式。为了保证 $ 在你的函数中是 jQuery,在最后传递 jQuery 而不是 $。这种定义函数或“代码区”的方式是为了确保在混合框架时 $ 确实是 jQuery。
许多 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 的一个快捷方式。它没有定义库,因此它也可以被其他框架使用。
考虑这种情况:
// 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
})($)
你的第二个例子是多余的。如果你可以通过 jQuery 使用$
then$
已经是 jQuery,即你可以写:
(function(){
$('#selectme');
})();
第一个例子,只有在你想在 noConflict 模式下使用 jQuery 时才值得,但仍然$
在选择的代码片段中使用 jQuery 来引用。否则,从技术上讲,您甚至不需要闭包(尽管出于许多其他原因,闭包是一种很好的做法)。