我正在看一段代码:
(function($) { // other code here $(document).ready(function() { // other code here }); })(jQuery);
我虽然IIFE的功能是$(document).ready,这段代码是否正确?或者我可以删除$(document).ready并将代码直接放在IIFE中。
解决方法
不,IIFE不会在文档中执行代码准备。
刚刚在IIFE:
(function($) { console.log('logs immediately'); })(jQuery);
准备中:
(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版本开始,更改处理程序。
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");
> outside handler
> inside handler