【问题标题】:understanding $ vs. jQuery in iife instead of $在 iife 中理解 $ vs. jQuery 而不是 $
【发布时间】:2012-07-09 08:04:24
【问题描述】:

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

(function($){

...

})(jQuery);

对比

(function($){

...

})($);

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

【问题讨论】:

  • 请以分号;结束您的陈述。否则你会遇到麻烦:( ... )( ... )( ... )( ... ).
  • 第一个代码的真正意义是当jQuery在noConflict mode时,能够使用$在函数内部引用jQuery。如果另一个框架在全局范围内使用 $ 命名空间,则第二个将无法按预期工作。

标签: jquery iife


【解决方案1】:

许多 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

如果您愿意,还可以:

What does $ mean in jQuery?

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

【讨论】:

  • 你不用document.ready()我最喜欢的是:jQuery($ => { /* code */ })
【解决方案2】:

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

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

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

【讨论】:

  • 这个例子不是多余的。在某些情况下,您不应该依赖全局范围,最好将所需的变量保留在函数范围内。考虑这个例子:(function(){setTimeout(function(){alert($===jQuery);},1000);})();$=13;,然后是(function($){setTimeout(function(){alert($===jQuery);},1000);})($);$=13;。你可以看到第二个例子给出了想要的结果
【解决方案3】:

有。
$ 只是 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
})($)

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2020-06-29
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多