js中setTimeout的执行机制具体是怎么样的?

如果setTimeout里的函数最后执行,那图一里的36行的varb=a(0);不就被38行的varb=a(1);覆盖了吗?就像图二一样。我想知道setTimeout(b... 如果setTimeout里的函数最后执行,那图一里的36行的var b=a(0);不就被38行的var b=a(1);覆盖了吗?就像图二一样。我想知道setTimeout(b,1000)具体做了什么? 展开
 我来答
无野楼升域醉0t
2019-08-09 · TA获得超过8552个赞
知道小有建树答主
回答量:1498
采纳率:88%
帮助的人:503万
展开全部

没看太懂你想问的问题,js是按行解释执行的36行声明的b一定会被38行再次声明的b覆盖,

第二段代码中16行的b也一定会被17行的b覆盖


更多追问追答
追问
我的意思是,setTimeout不是异步吗,所以36行,应该在35行和37行执行之后再执行吗。执行完37行之后b就被覆盖了,再执行36行,b输出的就是1了。
追答
你这里传入变量的是一个闭包,只要没有被在被覆盖前传入那么setTimeout就会保存这块内存。
而导致变量已经覆盖了却仍然保存了上下文。
而且仔细看这段代码是有内存泄露的可能。。。。不确定。太深入了也不太了解
匿名用户
2019-08-09
展开全部
setTimeout(b,1000)意思是在1000毫秒后输出b。
图一是在36行给b赋了值然后输出了0,然后在38行又给b赋值然后输出1。输出为0,1
图二是在16行给b赋了值,然后在17行又给b赋了值这时b变成了1,在用setTimeout输出就变成了输出为1,1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式