JavaScript 闭包 : Loop inside Loop

标签 javascript loops closures

由于像这样的闭包,我已经知道如何循环了:

for (var i = first; i <= last; i++) {
    document.getElementById(more + i).onmouseover = (function(arg1) {
        return function() {
            document.getElementById(arg1).style.display = "block";
        }
    })(i);
}

但我现在想看看循环内部。 我有 DOM 元素,它们必须动态附加到其他元素。这些元素的类型为:'1text1'、'1text2'、'1text3'、...'2text1'、'2text2'、'2text3'、'3text4'.. . 我尝试过这样的事情:

var text;
var ktext;
for (var k = 1; k <= last_number; k++) {
    for (var i = first; i <= last; i++) {
        ktext = k + text;
        document.getElementById(ktext + i).onmouseover = (function(arg1, arg2) {
            return function() {
                document.getElementById(arg1 + arg2).style.display = "block";
            }
        })(ktext, i);
    }
}

但是循环部分丢失。如果我将 alert(ktext + i) 放在 var i 循环的开头,我会看到:1text1, 1text2, 1text3, 1text4然后 2text1 (如预期),但不是 2text2, 2text3... ,就好像 var k 循环的第二遍停止得太早了。

最佳答案

您没有必要使用闭包:

for( k=1; k<=last_number; k++) {
  for( i=first; i<=last; i++) {
    document.getElementById(k+text+i).onmouseover = function() {
      this.style.display = "block";
    }
  }
}

无论如何,如果页面上不存在其中一个元素,您的循环可能会提前停止。在尝试分配元素之前,您应该检查该元素是否存在。

关于JavaScript 闭包 : Loop inside Loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085706/

相关文章:

javascript - 如何在倒计时后启动鼠标移动 Action 触发脚本?

javascript - 修复javascript中的变量增量

javascript - 使用 map 或 foreach 进行异步/等待

javascript - 如何循环绘制直线,使其重复 10 次

javascript - 循环遍历所有不是文件类型的输入项

c# - 循环变量上的闭包的正确语义是什么?

javascript - 如何使用 JavaScript 在另一个函数中传递带有可变参数的函数?

javascript - 如何提取仅在 Javascript 中具有多个值的数组数据?

Javascript Canvas 元素 - 图像数组

swift - 'Int' 与闭包中的 'UInt8' 不同