使用javascript和时间延迟从数组中选择元素

时间:2017-07-24 20:37:05

标签: javascript

我发布了一个我找不到的问题的答案。

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);
}

不起作用。 这就是答案。

现在,我不确定我知道为什么这是答案。你能照亮我吗?

1 个答案:

答案 0 :(得分:0)

这两个示例都有嵌套函数,这些函数使用在更高范围内使用i声明的变量(var),导致{{> closure {{{ 1}}持续存在于对该函数的每次调用中。如果将变量声明从i更改为var i(它提供let i块级别范围并确保在每次循环迭代时创建单独的i值,则问题将被解决。

第一个碰巧会产生一个结果,你只需偶然就可以。数组中只有一个项目,因此其ilength,因此,您的循环永远不会有机会再次迭代并向您显示两个迭代都使用相同的1值。