编写像这样的jquery onload函数有什么好处吗?

时间:2014-02-14 21:54:09

标签: javascript jquery

这是我的一位同事在编写javascript时使用的一段代码。 “与其他图书馆没有冲突”的观点是否可以通过这种方式获益?

jQuery((function($) {
    return function () {

        // code here

    };
}(jQuery)));

5 个答案:

答案 0 :(得分:3)

这实际上是self-executing anonymous function pattern

的组合
(function(window, document, $, undefined){
  ...
}(window, document, jQuery));

document.ready的jQuery简写:

jQuery(function($){
 ...
});

为了获得您可以做的所有优势:

jQuery(
  (function(window, document, $, undefined) {
     ...
  }(window, document, jQuery);
));

这样做的好处是:

  • 由匿名函数
  • 建立的闭包中的变量的私有性
  • 通过在闭包中将全局变量用作局部变量来获得较小的性能提升
  • 确保typeof(undefined) === 'undefined'
  • $被其他脚本篡改的独立性
  • 仅在domready解雇
  • 时运行此关闭
  • 通过允许使用缩短的变量名称引用全局变量来实现代码压缩工具。想想window> w

答案 1 :(得分:1)

是的,它不会与其他图书馆发生冲突。

答案 2 :(得分:1)

是的,当其他图书馆覆盖它时,它允许您继续使用$。但是,您的样本有点过于复杂;它可以简化为:

jQuery(function($){
    // code here
});

jQuery(document).ready(function($){
    // code here
});

不会失去任何好处。

答案 3 :(得分:0)

他正在使用jQuery的$.noConflict()模式,就像jQuery那样为其他库释放$,更多信息here

通常您不需要这样做,除非您使用的是与jQuery冲突的其他库。它还可以用于加载2个不同版本的jQuery。

答案 4 :(得分:0)

这实际上不是“onload”函数,而是“onready”函数。

但是如果你的意思是使用jQuery而不是$,那么好处肯定是为了防止冲突。

编辑:

我认为您可能输错了代码。你想要的是

(function($) {
  $(function() {
    // code here
  });
})(jQuery);

这会创建一个匿名函数,其中$作为参数传入,以便任何其他全局$不会发生冲突。然后它调用传递jQuery的匿名函数作为$参数。