闭包经典问题的疑惑。。。包括一些js的疑惑

「已注销」 2018-11-07 01:55:34
function f(i) {
for (var i=0;i<5;i++)
{
var flag=setTimeout(function f2() {
console.log("内部的i:"+i);
},1000);
console.log(flag);
sleep(3000);
}
console.log("外面的i:"+i);

}
f(100);
为什么settimeout函数不会1秒后执行,而是等整个for循环跑完才走(一开始我以为是for循环太快了,后来加了sleep3秒,发现还是等整个for循环结束后才走,不解)
...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-11-08
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
setTimeout() 是异步执行的,不是暂停当前的程序线程等待。而是要开启一个新的程序线程来执行。 你加了sleep()也没有用,因为js是单线程的,只有等当前的程序线程执行结束后才能开始计时,计时到了之后才开启一个新的程序线程来执行setTimeout设置的函数。
谢谢哈,我问完后才知道的,settimeout要等主线程空闲下来才会执行,时间到了只是放在等待队列里去等待主线程空闲下来。
  • 打赏
  • 举报
回复
听说路过可以水一波经验
天际的海浪 2018-11-07
  • 打赏
  • 举报
回复
setTimeout() 是异步执行的,不是暂停当前的程序线程等待。而是要开启一个新的程序线程来执行。 你加了sleep()也没有用,因为js是单线程的,只有等当前的程序线程执行结束后才能开始计时,计时到了之后才开启一个新的程序线程来执行setTimeout设置的函数。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧