javascript 关闭立即评估

标签 javascript loops closures scope

<分区>

考虑以下 Javascript 代码:

var a = [];

var f = function() {

    for (var i = 0; i < 3; i++) {
        a.push(function(){alert(i)});
    }
    for (var j = 0; j < 3; j++) {
        a[j]();
    }
};

警报全部打印出“3”三次。我想要一个不同的行为——在循环的每次迭代中生成一个打印 i 的当前值的函数。 IE。打印不同索引的 3 个函数。

有什么想法吗?

最佳答案

创建一个接受 i 作为参数并返回特定函数的匿名函数:

for (var i = 0; i < 3; i++) {
    a.push((function(i) {
        return function() {
            alert(i);
        }
    })(i));
}

for (var j = 0; j < 3; j++) {
    a[j]();
}

或者做类似的事情:创建一个接受i作为参数的匿名函数,将函数添加到数组中:

for (var i = 0; i < 3; i++) {
    (function(i) {
        a.push(function() {
            alert(i);
        });
    })(i);
}

for (var j = 0; j < 3; j++) {
    a[j]();
}

关于javascript 关闭立即评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413916/

相关文章:

javascript - 自定义 Google 可视化表中的排序列

javascript - google maps api v3 - 如何在气泡内显示图像缩略图?

loops - 动态 WHERE 子句 IN LOOP AT 语句

Java 循环遍历列表并再次返回,依此类推...使用什么列表类型?

javascript - jQuery 扩展复制之前的闭包

generics - 泛型闭包如何存储在泛型结构中?

javascript - 使用 .on ('scroll' ) 和 .each() 函数每个运行一次

javascript - 如何在 Node 中运行两个查询并将它们传递给渲染函数?

bash 在两个给定日期之间循环

arrays - Swift 使用多个排序条件对数组进行排序