We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
写出下列程序运行结果并做出解释:
setTimeout(function(){ console.log(1); },0); new Promise(function(resolve) { console.log(2) for(let i=0; i<10000 ; i++ ) { i==9999 && resolve(); } console.log(3) }).then(function(){ console.log(4) }); console.log(5);
The text was updated successfully, but these errors were encountered:
这个就涉及到事件循环(Event Loop)
JS运行时,对代码执行顺序的一个算法(任务调度算法)
JS 分类:同步任务和异步任务 JS 的执行机制:
event loop 里有维护两个不同的异步任务队列
每次执行一段代码(一个script标签)都是一个 macroTask 执行流程:
浏览器执行代码的过程如下整个流程
那么回到题目上去,就是
setTimeout(function(){ console.log(1); // 1-放入宏任务队列,7-执行下一轮事件循环,宏任务输出1 },0); new Promise(function(resolve) { console.log(2); // 2-同步输出 2 for(let i=0; i<10000 ; i++ ) { i==9999 && resolve(); } console.log(3); // 4-同步输出 3 }).then(function(){ console.log(4); // 3-放入微任务队列,6-回到微任务队列,执行剩余的微任务,输出4 }); console.log(5); // 5-同步输出 5
Sorry, something went wrong.
看完你的解释,我理解是先执行宏任务,因为settimeout延迟是0,所以应该是先输出1,再输出4。但是实际结果却是4,1
1-放入宏任务队列,7-执行下一轮事件循环,宏任务输出1, 所以在最后输出。
No branches or pull requests
写出下列程序运行结果并做出解释:
The text was updated successfully, but these errors were encountered: