我的同事一直在他的代码中广泛使用 IIFE inside (document).ready。现在,我已经阅读了这篇文章:

JQuery best practise, using $(document).ready inside an IIFE?

这让我开始思考我们是否应该在 IIFE 中使用 $(document).ready 或者也可以像我的同事那样使用其他方式。

所以基本上,他的代码是这样设置的:

jQuery(function() {
    (function($) {
        //...
        // Code here
        //...
    })(jQuery);
});

他的所作所为总体上还好吗?

最佳答案

有些人可能会争辩说这是一个风格/观点的问题,但如果你在那种情况下考虑 IIFE 的典型目标,我相信答案是 是的,使用你的替代方式是可以接受的,但有一个潜在的缺点 .

Wikipedia 不得不说:



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

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

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

使用 common 样式可以为您提供完整的 IIFE 好处:
(function($) {
    // Non-DOM-ready-required code here (scope-safe)
    $(function() {
      //...
      // DOM-ready-required code here
      //...
    });
 })(jQuery);

关于javascript - $(document).ready 内的 IIFE 或其他方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31634281/

10-11 13:36