之前做相册的后台监控系统,在编写前端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