1. 执行顺序题

    第一题

    ```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

  1. <a name="m28bH"></a>
  2. ### 第二题
  3. ```javascript
  4. async function async1(){
  5. console.log('async1 start')
  6. await async2()
  7. console.log('async1 end')
  8. }
  9. async function async2(){
  10. console.log('async2')
  11. }
  12. console.log('script start')
  13. setTimeout(function(){
  14. console.log('setTimeout')
  15. },0)
  16. async1()
  17. new Promise((resolve)=>{
  18. console.log('promise1')
  19. resolve()
  20. }).then(function (){
  21. console.log('promise2')
  22. })
  23. console.log('script end')
  24. // script start
  25. // async1 start
  26. // async2
  27. // promise1
  28. // script end
  29. // async1 end
  30. // promise2
  31. // setTimeout

第三题

  1. Promise.resolve().then(()=>{
  2. console.log('第一个回调函数:微任务1')
  3. setTimeout(()=>{ console.log('第三个回调函数:宏任务2') },0)
  4. })
  5. setTimeout(()=>{
  6. console.log('第二个回调函数:宏任务1')
  7. Promise.resolve().then(()=>{ console.log('第四个回调函数:微任务2') })
  8. },0)
  9. // 微任务1
  10. // 宏任务1
  11. // 微任务2
  12. // 宏任务2

第四题

  1. console.log("start");
  2. async function async1() {
  3. console.log("async1 start");
  4. await async2();
  5. console.log("async2 end");
  6. await async3();
  7. console.log("async3 end");
  8. }
  9. function async2() {
  10. console.log("async");
  11. }
  12. function async3() {
  13. console.log("async3 start");
  14. }
  15. console.log("scrpit start");
  16. setTimeout(() => {
  17. console.log("setTimeOut");
  18. }, 0);
  19. async1();
  20. new Promise(function (reslove) {
  21. console.log("promise1");
  22. reslove("promise2");
  23. }).then((res) => {
  24. console.log(res);
  25. });
  26. console.log("script end");
  27. // start
  28. // script start
  29. // async1 start
  30. // async
  31. // promise1
  32. // script end
  33. // async1 end
  34. // async3 start
  35. // promise2
  36. // async3 end
  37. // setTimeout

第五题

  1. let promiseFunc = function () {
  2. return new Promise((resolve, reject) => {
  3. console.log(this.name);
  4. setTimeout(function () {
  5. console.log(this.name);
  6. console.log('abc');
  7. resolve('cba');
  8. }, 2000);
  9. console.log('aaa');
  10. });
  11. };
  12. let Object1 = {
  13. name: 'james',
  14. func: promiseFunc,
  15. };
  16. Object1.func().then((result) => {
  17. console.log('result', result);
  18. });
  19. // james
  20. // aaa
  21. // undefied(箭头函数的this向上查找到第一个函数作用域,Promise的回调函数的this没有name)
  22. // abc
  23. // resolve(cbd)后执行then
  24. // result,cbd

第六题

  1. console.log('start here');
  2. const foo = () => {
  3. return new Promise((resolve, reject) => {
  4. console.log('first promise constructor');
  5. let promise1 = new Promise((resolve, reject) => {
  6. console.log('second promise constructor');
  7. setTimeout(() => {
  8. console.log('setTimeout here');
  9. // 这里的resolve会触发哪里的then,还是说不触发
  10. resolve();
  11. }, 0);
  12. resolve('promise1');
  13. });
  14. resolve('promise0');
  15. promise1.then((arg) => {
  16. console.log(arg);
  17. });
  18. });
  19. };
  20. foo().then((arg) => {
  21. console.log(arg);
  22. });
  23. console.log('end here');
  24. // start here
  25. // fisrt
  26. // second
  27. // end here
  28. // promise1
  29. // promise0
  30. // setTimeout here

第七题

  1. console.log('Script开始')
  2. setTimeout(() => {
  3. console.log('第一个回调函数,宏任务1')
  4. Promise.resolve().then(function() {
  5. console.log('第四个回调函数,微任务2')
  6. })
  7. }, 0)
  8. setTimeout(() => {
  9. console.log('第二个回调函数,宏任务2')
  10. Promise.resolve().then(function() {
  11. console.log('第五个回调函数,微任务3')
  12. })
  13. }, 0)
  14. Promise.resolve().then(function() {
  15. console.log('第三个回调函数,微任务1')
  16. })
  17. console.log('Script结束')
  18. // script开始
  19. // script结束
  20. // 微任务1
  21. // 宏任务1
  22. // 宏任务2
  23. // 微任务2
  24. // 微任务3

第八题

  1. console.log('Script开始')
  2. setTimeout(() => {
  3. console.log('宏任务1(setTimeout)')
  4. Promise.resolve().then(() => {
  5. console.log('微任务promise2')
  6. })
  7. }, 0)
  8. setImmediate(() => {
  9. console.log('宏任务2')
  10. })
  11. setTimeout(() => {
  12. console.log('宏任务3(setTimeout)')
  13. }, 0)
  14. console.log('Script结束')
  15. Promise.resolve().then(() => {
  16. console.log('微任务promise1')
  17. })
  18. process.nextTick(() => {
  19. console.log('微任务nextTick')
  20. })
  21. // script开始
  22. // script结束
  23. // 个人错误答案
  24. // 微任务1
  25. // 微任务NextTick
  26. // 微任务nectTick
  27. // 微任务1
  28. // 宏2 setImmediate
  29. // 宏1
  30. // promise2
  31. // 宏3

第九题

  1. async function async1 () {
  2. console.log('async1 start');
  3. await new Promise(resolve => {
  4. console.log('promise1')
  5. resolve('promise1 resolve')
  6. }).then(res => console.log(res))
  7. console.log('async1 success');
  8. return 'async1 end'
  9. }
  10. console.log('srcipt start')
  11. async1().then(res => console.log(res))
  12. console.log('srcipt end')
  13. // script start
  14. // async1 start
  15. // promise1
  16. // script end
  17. // promise1 resolve
  18. // async1 success
  19. // async1 end

算法

image.png
image.png
image.png
image.png