首页 >web前端 >js教程 >IIFE 如何帮助克服快速循环中事件侦听器的限制?

IIFE 如何帮助克服快速循环中事件侦听器的限制?

Patricia Arquette
Patricia Arquette原创
2024-11-09 07:02:02394浏览

How can IIFEs help overcome the limitations of event listeners in fast loops?

使用闭包克服快速循环中事件监听器的限制

挑战:
经常使用 for 循环向多个对象添加事件监听器导致所有侦听器都针对 JavaScript 中的同一对象。发生这种情况是由于闭包的作用域所致。

解决方案:
要解决此问题,请在循环内使用 立即调用函数表达式 (IIFE)。这会为每次迭代创建一个新的作用域,从而允许正确引用变量。

示例:

// Function to run on click:
function makeItHappen(elem, elem2) {
    var el = document.getElementById(elem);
    el.style.backgroundColor = "red";
    var el2 = document.getElementById(elem2);
    el2.style.backgroundColor = "blue";
}

// Autoloading function to add the listeners:
var elem = document.getElementsByClassName("triggerClass");

for (var i = 0; i < elem.length; i += 2) {
    // IIFE to create a new scope for each iteration
    (function () {
        var k = i + 1;
        var boxa = elem[i].parentNode.id;
        var boxb = elem[k].parentNode.id;
        elem[i].addEventListener("click", function() { makeItHappen(boxa,boxb); }, false);
        elem[k].addEventListener("click", function() { makeItHappen(boxb,boxa); }, false);
    }()); // immediate invocation
}

解释:
在此代码中,IIFE 用于为每次迭代创建一个新范围。这确保了变量 boxa 和 boxb 被正确引用,并且事件侦听器被分配给适当的容器元素。

关键见解:
在使用循环时,闭包在 JavaScript 中至关重要涉及传递值。通过使用 IIFE 创建新作用域,您可以防止与闭包相关的问题,确保您的代码按预期运行。

以上是IIFE 如何帮助克服快速循环中事件侦听器的限制?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn