下面是JavaScript中的简单jest测试块,在describe
下,我编写了一个简单的test
来打印要放入的循环的当前索引(直到5)。但结果始终是Test 5
describe("Hello", async ()=>{
for(var i=0; i<5; ++i){
test(``Test ${i}``, async ()=>{
await console.debug("Test "+ i);
});
}
});
有人能澄清一下,它是如何工作的吗?
发布于 2018-08-23 18:18:57
使用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)
}
https://stackoverflow.com/questions/51983471
复制相似问题