以下面的两个例子为例。在这两个示例中,变量i
都分配为 0 到 9。在第一个示例中,在调用超时函数时,i
已经分配了值 9。我不知道i
设置超时时的值。
for(var i = 0; i < 10; i++) {
var callback = function() {
alert('The first test returns: ' + i);
};
if(i === 0) setTimeout(callback, 2000);
}
在第二个选项中,我们可以i
通过将值传递到一个新的上下文中来保持它的值(如果这个术语不正确,请纠正我)。
for(var i = 0; i < 10; i++) {
var callback = (function(i) {
return function() {
alert('The second test returns: ' + i);
}
})(i);
if(i === 0) setTimeout(callback, 2000);
}
第二个例子给了我我期望的值,0
那么就垃圾收集而言,它是如何工作的?GC 什么时候会删除这个值?在回调函数结束时?还是会有某种内存泄漏?