很有意思的题
先来一个
for (var i=0; i < 5; i++) { setTimeout(function(){ console.log(i); }, 1000); } console.log(i);
答案:5,5,5,5,5,5
进化一下
期望是:5,0,1,2,3,4
这里就用到闭包
for (var i = 0; i < 5; i++) { setTimeout((function (i) { return function () { console.log(i); } })(i), 1000); } console.log(i);
还要进化
期望是:0,1,2,3,4,5
这就需要异步操作,Promise
var Pro = new Promise(function (resolve, reject) { for (var i = 0; i < 5; i++) { setTimeout((function (i) { return function () { console.log(new Date().getTime(), i); } })(i), 1000); } setTimeout(function () { resolve(i); }, 1000); }); Pro.then(function (res) { console.log(new Date().getTime(), res); })
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步