- 执行顺序题
第一题
```javascript let obj = { num1: 117 } let res = obj; obj.child = obj = { num2: 935 }; var x = y = res.child.num2; console.log(obj.child); console.log(res.num1); console.log(y);
// undefined // 117 // 935
<a name="m28bH"></a>### 第二题```javascriptasync function async1(){console.log('async1 start')await async2()console.log('async1 end')}async function async2(){console.log('async2')}console.log('script start')setTimeout(function(){console.log('setTimeout')},0)async1()new Promise((resolve)=>{console.log('promise1')resolve()}).then(function (){console.log('promise2')})console.log('script end')// script start// async1 start// async2// promise1// script end// async1 end// promise2// setTimeout
第三题
Promise.resolve().then(()=>{console.log('第一个回调函数:微任务1')setTimeout(()=>{ console.log('第三个回调函数:宏任务2') },0)})setTimeout(()=>{console.log('第二个回调函数:宏任务1')Promise.resolve().then(()=>{ console.log('第四个回调函数:微任务2') })},0)// 微任务1// 宏任务1// 微任务2// 宏任务2
第四题
console.log("start");async function async1() {console.log("async1 start");await async2();console.log("async2 end");await async3();console.log("async3 end");}function async2() {console.log("async");}function async3() {console.log("async3 start");}console.log("scrpit start");setTimeout(() => {console.log("setTimeOut");}, 0);async1();new Promise(function (reslove) {console.log("promise1");reslove("promise2");}).then((res) => {console.log(res);});console.log("script end");// start// script start// async1 start// async// promise1// script end// async1 end// async3 start// promise2// async3 end// setTimeout
第五题
let promiseFunc = function () {return new Promise((resolve, reject) => {console.log(this.name);setTimeout(function () {console.log(this.name);console.log('abc');resolve('cba');}, 2000);console.log('aaa');});};let Object1 = {name: 'james',func: promiseFunc,};Object1.func().then((result) => {console.log('result', result);});// james// aaa// undefied(箭头函数的this向上查找到第一个函数作用域,Promise的回调函数的this没有name)// abc// resolve(cbd)后执行then// result,cbd
第六题
console.log('start here');const foo = () => {return new Promise((resolve, reject) => {console.log('first promise constructor');let promise1 = new Promise((resolve, reject) => {console.log('second promise constructor');setTimeout(() => {console.log('setTimeout here');// 这里的resolve会触发哪里的then,还是说不触发resolve();}, 0);resolve('promise1');});resolve('promise0');promise1.then((arg) => {console.log(arg);});});};foo().then((arg) => {console.log(arg);});console.log('end here');// start here// fisrt// second// end here// promise1// promise0// setTimeout here
第七题
console.log('Script开始')setTimeout(() => {console.log('第一个回调函数,宏任务1')Promise.resolve().then(function() {console.log('第四个回调函数,微任务2')})}, 0)setTimeout(() => {console.log('第二个回调函数,宏任务2')Promise.resolve().then(function() {console.log('第五个回调函数,微任务3')})}, 0)Promise.resolve().then(function() {console.log('第三个回调函数,微任务1')})console.log('Script结束')// script开始// script结束// 微任务1// 宏任务1// 宏任务2// 微任务2// 微任务3
第八题
console.log('Script开始')setTimeout(() => {console.log('宏任务1(setTimeout)')Promise.resolve().then(() => {console.log('微任务promise2')})}, 0)setImmediate(() => {console.log('宏任务2')})setTimeout(() => {console.log('宏任务3(setTimeout)')}, 0)console.log('Script结束')Promise.resolve().then(() => {console.log('微任务promise1')})process.nextTick(() => {console.log('微任务nextTick')})// script开始// script结束// 个人错误答案// 微任务1// 微任务NextTick// 微任务nectTick// 微任务1// 宏2 setImmediate// 宏1// promise2// 宏3
第九题
async function async1 () {console.log('async1 start');await new Promise(resolve => {console.log('promise1')resolve('promise1 resolve')}).then(res => console.log(res))console.log('async1 success');return 'async1 end'}console.log('srcipt start')async1().then(res => console.log(res))console.log('srcipt end')// script start// async1 start// promise1// script end// promise1 resolve// async1 success// async1 end
算法




