我的同事一直在他的代码中广泛使用IIFE(文件).ready.现在,我读过这篇文章:
JQuery最佳实践,在IIFE中使用$(document).ready?
这让我想到我们是否应该在IIFE中使用$(document).ready,或者在我的同事正在做的时候反过来也是如此.
所以基本上,他的代码设置如下:
jQuery(function() {
(function($) {
//...
// Code here
//...
})(jQuery);
});
Run Code Online (Sandbox Code Playgroud)
他一般做得好吗?
有些人可能认为这是风格/意见的问题,但如果你考虑在这种情况下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)