[阅读: 377] 2009-12-17 10:19:44
for (var i=1; i<prog_devices.length; i++)
{
if (prog_devices[i].id == devidx) continue;
function(i){
var target = prog_devices[i].id;
menuDevice.push({text:prog_devices[i].caption,
handler:function(){Gok.Smt.Prog.moveMats(prog, devidx, target)}});
}(i);
}
JavaScript的Closure环境由静态的句法结构确定。也就是说,代码一旦写成,我们就知道函数的自由变量同哪些环境里的变量绑定。因此,虽然运行时同一个内函数被调用多次,创建了多个闭包,但是这些闭包指向的都是同一个环境里的同一个变量,使用的是i的最终值