IIFE在$(文件).ready或其他方面

g_b*_*g_b 7 javascript jquery

我的同事一直在他的代码中广泛使用IIFE(文件).ready.现在,我读过这篇文章:

JQuery最佳实践,在IIFE中使用$(document).ready?

这让我想到我们是否应该在IIFE中使用$(document).ready,或者在我的同事正在做的时候反过来也是如此.

所以基本上,他的代码设置如下:

jQuery(function() {
    (function($) {
        //...
        // Code here
        //...
    })(jQuery);
});
Run Code Online (Sandbox Code Playgroud)

他一般做得好吗?

Chr*_*ter 8

有些人可能认为这是风格/意见的问题,但如果你考虑在这种情况下IIFE的典型目标,我相信答案是肯定的,使用你的替代方式是可以接受的,但是存在潜在的缺点.

维基百科不得不说:

立即调用的函数表达式可用于避免块内的变量提升,防止污染全局环境,同时允许公共访问方法,同时保留函数中定义的变量的隐私.

这两种方法都不会污染全局命名空间,因为它们不会声明任何变量.因此,使用任何一种方法都应该没问题.虽然注意它是部分冗余的,因为ready事件的函数处理程序已经创建了一个新的作用域,并且还注意到最常见的做法是看到IIFE函数将所有代码封装在一个文件中.


您的同事使用方式的一个缺点:如果您确实想要执行一些不依赖于DOM准备的javascript逻辑,那么如果您将代码放在IIFE之外,那么您将无法享受IIFE的好处.所以像这样的东西是不安全的:

// Non-DOM-ready-required code here (NOT scope-safe)
jQuery(function() {
    (function($) {
        //...
        // DOM-ready-required code here
        //...
    })(jQuery);
});
Run Code Online (Sandbox Code Playgroud)

使用通用样式为您提供完整的IIFE优势:

(function($) {
    // Non-DOM-ready-required code here (scope-safe)
    $(function() {
      //...
      // DOM-ready-required code here
      //...
    });
 })(jQuery);
Run Code Online (Sandbox Code Playgroud)