我发布了一个我找不到的问题的答案。
var imgs=[];
doge=new imgage_wrapper("50","10","10","doge1.png");
imgs.push(doge);
for(var i=0;i<imgs.length;i++)
{
var test = imgs[i];
setTimeout(function(){test.destructor()},1000);
}
这很有效。 但是,
for(var i=0;i<imgs.length;i++)
{
setTimeout(function(){imgs[i].destructor()},1000);
}
不起作用。 这就是答案。
现在,我不确定我知道为什么这是答案。你能照亮我吗?
答案 0 :(得分:0)
这两个示例都有嵌套函数,这些函数使用在更高范围内使用i
声明的变量(var
),导致{{> closure {{{ 1}}持续存在于对该函数的每次调用中。如果将变量声明从i
更改为var i
(它提供let i
块级别范围并确保在每次循环迭代时创建单独的i
值,则问题将被解决。
第一个碰巧会产生一个结果,你只需偶然就可以。数组中只有一个项目,因此其i
为length
,因此,您的循环永远不会有机会再次迭代并向您显示两个迭代都使用相同的1
值。