之前做相册的后台监控系统,在编写前端ajax请求数据批量更新界面的代码时,遇到了在循环体中构造闭包的一个常见问题。现记录如下。
系统中的case抽象出来就是这样一个问题:定义一个函数,这个函数返回一个长度为4的函数数组,且第i个函数的调用结果是在屏幕上打印数字i。
初步一想,这个问题很简单,代码如下:
function echo_funcs() {
  var funcs = []; 
  for (var i = 1; i < 5; ++i) {
    function echo_func() {
      console.log(i);      // 第i个函数打印i
    }   
    funcs.push(echo_func);
  }
  return funcs;
}
var funcs = echo_funcs();
for (var i in funcs) {
  funcs[i]();
}
用node.js执行这段代码,结果是:
5
5
5
5