修复此Javascript闭包的正确方法是什么?

suj*_*joe 4 javascript closures

我一直在熟悉javascript闭包,并浏览了这篇文章 http://blog.morrisjohns.com/javascript_closures_for_dummies.html

由于关闭,示例5不能按预期工作.如何修改

result.push( function() {alert(item + ' ' + list[i])} );
Run Code Online (Sandbox Code Playgroud)

使代码工作?

function buildList(list) { 
  var result = [];
  for (var i = 0; i < list.length; i++) {
    var item = 'item' + list[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]();
  }
}

testList();
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ale*_*yne 6

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

  • 关闭:如果他们没有解决你的问题,你只是没有足够的使用! (3认同)