如何在列表函数中修复此闭包?

时间:2015-11-25 21:51:18

标签: javascript closures anonymous-function

这个very good Stack Overflow answer给出了一个示例,说明在列表中返回匿名函数时,闭包如何直观地起作用。

function buildList(list) {
    var result = [];
    for (var i = 0; i < list.length; i++) {
        var item = 'item' + i;
        result.push( function() {alert(item + ' ' + list[i])} );
    }
    return result;
}

function testList() {
    var fnlist = buildList([1,2,3]);
    // Using j only to help prevent confusion -- could use i.
    for (var j = 0; j < fnlist.length; j++) {
        fnlist[j]();
    }
}

此代码将返回:

item2 undefined
item2 undefined
item2 undefined

我的问题是 - 您如何修改此代码以便返回我们期望的结果?

item0 1
item1 2
item2 3

1 个答案:

答案 0 :(得分:1)

for的{​​{1}}循环中使用IIFE并传入buildList

这将确保传入的i将保留在i封闭内,并且不会被IIFE循环中的i更改

for