我正在看一段代码:

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

我虽然IIFE可以执行$(document).ready的功能,但是此代码正确吗?或者我可以只删除$(document).ready并将代码直接放在IIFE内。

最佳答案

否,IIFE不会执行文档准备就绪的代码。

1.在IIFE中:

(function($) {
  console.log('logs immediately');
})(jQuery);

这段代码立即运行,日志“立即日志”,无需准备文件。

2.准备就绪:
(function($) {
   $(document).ready(function(){
     console.log('logs after ready');
   });
})(jQuery);

立即运行代码,等待文档准备就绪,并记录“准备就绪后的日志”。

这可以更好地理解:
(function($) {
  console.log('logs immediately');
  $(document).ready(function(){
    console.log('logs after ready');
  });
})(jQuery);

这将在窗口加载后立即将“立即日志”记录到控制台,但仅在文档准备好之后才记录“就绪后的日志”。

IIFE不是准备就绪的替代方法:
$(document).ready(function(){})的替代方法是:
$(function(){
   //code in here
});

更新资料

从jQuery 3.0版开始,更改了ready处理程序。

Only the following form of ready handler is recommended.
jQuery(function($) {

});

Ready handler is now asynchronous.
$(function() {
  console.log("inside handler");
});
console.log("outside handler");

关于jquery - jQuery最佳实践,在IIFE中使用$(document).ready吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24930807/

10-12 17:57