我经常看到很多事件侦听器代码都包装在IIFE中,(function(e){}())
我觉得没有必要将事件侦听器保留在IIFE中。例如:
没有IIFE
jQuery(window).on("load", function(){
console.log("inside plain load");
});
与IIFE
(function(){
jQuery(window).on("load", function(){
console.log("inside wrapped load");
});
}())
如果我们将上述代码一起包含在js文件中,则在加载事件时,它们仅根据其编写顺序执行。
我知道IIFE会自行调用,但是在其中包含事件侦听器有什么用呢?无论如何,只有事件发生时它才会触发。
对于您的示例,没有区别。
使用IIFE的主要原因是为了防止在全局范围内泄漏变量。
(function(){
let notLeakedVariable = 'something'
jQuery(window).on("load", function(){
console.log("inside wrapped load");
console.log(notLeakedVariable)
});
}())
没有IIFE,您将在全局范围内泄漏变量。
通过包装您的侦听器,您甚至可以将多个侦听器分组,并且它们通过闭包将共享相同的作用域。
(function(){
let sharedVariable = 'something'
jQuery(window).on("load", function(){
console.log("inside wrapped load");
// sharedVariable is accessible
});
jQuery(selector).on("click", function(){
// sharedVariable is accessible
});
}())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句