js闭包--关于在for循环中每隔一秒打印一次

上篇我们介绍了js闭包-关于在for循环中绑定事件打印变量i
我们可以将结果一次性打印出0 1 2 3 4,那么下面我介绍一下每隔一秒钟一次打印出 0 1 2 3 4
1000*i是重点
es5方法:

for (var i = 0; i < 5; i++) {
 	(function (j) { 
 		setTimeout(function() { 
 			console.log(new Date, j); 
 		}, 1000 * j); 
 	})(i); 
 } 
 setTimeout(function() {  
 	console.log(new Date, i); 
 }, 1000 * i);

结果
在这里插入图片描述
es6方法:

const tasks = [];
const output = (i) => new Promise((resolve) => {
  setTimeout(() => {
    console.log(new Date, i);
    resolve();
  }, 1000 * i);
});

for (var i = 0; i < 5; i++) {
  tasks.push(output(i));
}
//最后的i的值是在异步全部完成之后
Promise.all(tasks).then(() => {
  setTimeout(() => {
    console.log(new Date, i);
  }, 1000);
});

结果:
在这里插入图片描述
es7方法:

const sleep = (timeountMS) => new Promise((resolve) => {
  setTimeout(resolve, timeountMS);
});

(async () => {
  for (var i = 0; i < 5; i++) {
    if (i > 0) {
      await sleep(1000);
    }
    console.log(new Date, i);
  }
//循环完成之后
  await sleep(1000);
  console.log(new Date, i);
})();

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36711388/article/details/89889974