console.log总是在for循环中显示最高索引

时间:2018-08-23 10:15:46

标签: javascript asynchronous jestjs

下面是JavaScript中最简单的笑话测试块,在describe下,我编写了一个简单的test来打印循环的当前索引(直到5)。但是结果总是Test 5

describe("Hello", async ()=>{
    for(var i=0; i<5; ++i){
        test(``Test ${i}``, async ()=>{
            await console.debug("Test "+ i);
        });
    }
});

有人可以澄清一下,它如何工作?

1 个答案:

答案 0 :(得分:-1)

使用let代替var,让我们为每个async调用保留范围。因此,在每个循环中,i的新值将被传递到您的方法,并且这些值将保持不变。对于var,变量i的作用域为function(该函数是您在describe()中用作回调的函数),因此当您使用asyn方法时解析后,您将看到回调内部存在的i值,因为循环已经结束,所以该值将为5

for(let i=0; i<5; ++i){
       // dummy async method
       setTimeout(() => {
          console.log(i)
       }, 2000)
    }