话不多说,直接上代码
for(var i=0;i<5;i++){ settimeout(function(){ console.log(i) },1000) }
1s后输出5个5。var 声明的变量,每次循环后的新值,会替换掉上一次的值;
for (var i = 0;i<5;i++) { (function(j){ settimeout(function(){ console.log(j) },1000); })(i) }闭包,但是这种写法是1s后一次性输出0,1,2,3,4。并非我们要求的一秒一个,一秒一个。
for (let i = 0;i<5;i++) { settimeout(function(){ console.log(i) },1000)也是一次性输出。改写方式同上,时间间隔上做处理
let arr=[]; for (var i = 0;i<5;i++) { ((j)=>{ let p = new promise(function(resolve,reject){ settimeout(function(){ console.log(j); resolve(); },1000*j) }) arr.push(p) })(i) }; promise.all(arr)将 var 换成 let 声明方式,就可以去掉外层的(j)(i)这个了
function timeout(ms) { return new promise((resolve) => { settimeout(resolve, ms); }); } async function asyncprint(value, ms) { await timeout(ms); console.log(value); } for (let i=0;i<5;i++) { // let 声明 asyncprint(i,1000*i) } for (var i= 0;i<5;i++) { //var 声明 ((j)=>{ asyncprint(j,1000*j) })(i) }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
css3 flex布局 justify-content:space-between 最后一行左对齐
网友评论