类别:js / 日期:2022-11-17 / 浏览:349 / 评论:0

首先我们来看这样一道题:

setTimeout(function () {
    console.log(1)
}, 0);
new Promise(function (resolve, reject) {
    console.log(2)
    for (var i = 0; i < 10000; i++) {
        if (i === 10) { console.log(10) }
        i == 9999 && resolve();
    }
    console.log(3)
}).then(function () {
    console.log(4)
})
console.log(5);
输出答案为 2 10 3 5 4 1
要先弄清楚 settimeout(fun,0)何时执行,promise 何时执行,then 何时执行
settimeout 这种异步操作的回调,只有主线程中没有执行任何同步代码的前提下,才会执行异步回调,而 settimeout(fun,0)表示立刻执行,也就是用来改变任务的执行顺序,要求浏览器尽可能快的进行回调

promise 何时执行,由上图可知 promise 新建后立即执行,所以 promise 构造函数里代码同步执行的,then 方法指向的回调将在当前脚本所有同步任务执行完成后执行,那么 then 为什么比 settimeout 执行的早呢,因为 settimeout(fun,0)不是真的立即执行

经过测试得出结论:执行顺序为:同步执行的代码-》promise.then->settimeout

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

«    2023年11月    »
12345
6789101112
13141516171819
20212223242526
27282930

最新留言