javascript - settimeout方法执行时间的疑问

查看:78
本文介绍了javascript - settimeout方法执行时间的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

console.log("2");
setTimeout(function () {
    console.log("1");
}, 0)

控制台输出的结果:
2
xxx
1

这里xxx是一个随机的数,每次都不一样。为什么结果还有有这么一个随机数?

setTimeout(function () {
    console.log("1");
}, 0)
console.log("2");

然后这个输出的是:
2
undefined
1
为什么是先输出2?不是1呢?
另外,setTimeout会返回一个ID标识这个定时器,为什么第二段代码就没有返回这个ID?

解决方案

setTimeout的作用是将代码推迟到指定时间执行,如果指定时间为0,即setTimeout(f, 0),那么会立刻执行吗?

答案是不会。因为上一段说过,必须要等到当前脚本的同步任务和任务队列中已有的事件,全部处理完以后,才会执行setTimeout指定的任务。也就是说,setTimeout的真正作用是,在消息队列的现有消息的后面再添加一个消息,规定在指定时间执行某段代码。setTimeout添加的事件,会在下一次Event Loop执行。

setTimeout(f, 0)将第二个参数设为0,作用是让f在现有的任务(脚本的同步任务和消息队列指定的任务)一结束就立刻执行。也就是说,setTimeout(f, 0)的作用是,尽可能早地执行指定的任务。而并不是会立刻就执行这个任务。

转自阮一峰的js标准参考教程
http://javascript.ruanyifeng....

这篇关于javascript - settimeout方法执行时间的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆