像这样初始化jQuery有什么好处?

Min*_*nja 7 javascript jquery iife

我正在阅读Greg Franko关于'jQuery Best Practices'的博客文章.

在他的早期幻灯片中,他解释了典型/更好/最好的做事方式.

典型(链接)

$("document").ready(function() {
    console.log('hello world');
});
Run Code Online (Sandbox Code Playgroud)

要么

$(function() {
    console.log('hello world');
});
Run Code Online (Sandbox Code Playgroud)

更好(链接)

(function($, window, document) {
    $(function() {
        console.log('hello world');
    });
 }(window.jQuery, window, document));
Run Code Online (Sandbox Code Playgroud)

最好的(链接)

(function(yourcode) {
    yourcode(window.jQuery, window, document);
}(function($, window, document) {
    $(function() {
        console.log('hello world');
    });
}));
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是 - 第三个例子比第二个例子好吗?两者都是IIFE.我看到的唯一区别是#2将jQuery对象(+ window + document)传递到IIFE并运行代码然后#3传递jQuery对象(+ window + document) JavaScript代码传入IIFE.有什么好处?

anu*_*emn 1

@敏贾,

我相信自执行函数包装器 (function() { ... }()) 是提高性能的诀窍。

请参阅下面的试验。

我尝试用下面的代码缩短最佳代码,这确实减少了执行时间。

(function($, window, document) {
    $(function() {
        console.log('hello world');
    });
}(window.jQuery, window, document));
Run Code Online (Sandbox Code Playgroud)

但下面的内容确实进一步减少了它。现在这变成了最好的。:)

(function(){
  (function($, window, document) {
    $(function() {
        console.log('hello world');
    });
  }(window.jQuery, window, document));
}())
Run Code Online (Sandbox Code Playgroud)

请参阅下面的屏幕截图以获取证明: 在此输入图像描述