1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| console.log('script start'); var promise1 = new Promise(function (resolve) { console.log('promise1'); resolve(); console.log('promise1 end'); }).then(function () { console.log('promise2'); }) setTimeout(function () { console.log('setimeout'); }) console.log('script end');
主栈开始时从上到下执行,会先打印出 script start 遇到了promise函数,由于promise函数是同步立即执行函数, 因此会立即执行方法体内的程序,打印出promise1, 遇到了resolve()函数,跳过(会在then/catch之后执行) 打印 promise1 end.此时Promise()函数的执行 ,已经执行完毕, 主栈继续下面语句,遇到settimeout时异步执行, 然后会执行 script end,结束 ,此时会执行下一个事件循环, 然后会打印出promise2,然后在打印出settimeout
|