事件侦听器是否需要位于IIFE中?

亚伯:

我经常看到很多事件侦听器代码都包装在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中包装事件侦听器?
  • IIFE内部的事件侦听器真的是一种好习惯吗?
拉杜·迪亚(Radu Diță):

对于您的示例,没有区别。

使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

事件侦听器是否需要位于IIFE中?

在删除元素之前是否需要删除事件侦听器?

是否需要在Java中处理诸如keyup / down之类的事件侦听器?

是否需要手动删除手动添加到React组件中的元素的事件侦听器?

在MVC模式中,侦听器是否应位于Controler中?

是否可以在nodejs中的“ newListener”事件的事件侦听器回调中发出事件?

侦听器以检测视图是否位于最前面?

创建一个事件侦听器来侦听变量中的值是否已更改

完成后,是否需要删除FileReader()的事件侦听器?

Java 中的事件(侦听器)

类中的 Javascript 事件侦听器

jQuery中的单击事件侦听器

如何检查侦听器事件是否是被动事件?

我需要在关闭窗口之前从窗口对象中删除事件侦听器吗?

事件侦听器中的匿名函数与事件侦听器中的匿名函数

CreateJS是否包含与AS3中的“ ENTER_FRAME”类似的事件侦听器?

是否可以为数组中的每个对象定义事件侦听器?

是否可以从Vue.js 2中的组件访问事件侦听器

是否使用“ .click()”异步触发事件侦听器?

Angular是否会自动删除模板事件侦听器?

如何检查是否存在动态附加的事件侦听器?

是否有 jQuery 的 .load(); 的 jQuery 事件侦听器?

是否可以在 if 语句中嵌套 jQuery 事件侦听器?

模块是否阻止了使用DOMContentLoaded侦听器的需要?

表事件侦听器

事件侦听器的范围

Javascript事件侦听器

反应。如何在创建的侦听器中删除事件侦听器?

jQuery在不同的DOM层次结构中委派的事件侦听器-是否会触发适用的事件侦听器?