前端

64 阅读2分钟

Promise 永远在队列尾部添加微观任务。setTimeout 等宿主 API,则会添加宏观任务。

微任务总会在下一个宏任务之前执行,在本身所属的宏任务结束后立即执行

首先我们分析有多少个宏任务; 在每个宏任务中,分析有多少个微任务; 根据调用次序,确定宏任务中的微任务执行次序; 根据宏任务的触发规则和调用次序,确定宏任务的执行次序; 确定整个顺序

function sleep(duration) {
      return new Promise(function (resolve, reject) {
          console.log("b");
          setTimeout(resolve, duration);
        })
      }
      console.log("a");
      sleep(5000).then(() => console.log("c"));
      

await 会堵塞后续代码的执行

await foo("a");
await foo("b");				会依次执行

this 的解释已经非常清晰了:调用函数时使用的引用,决定了函数执行时刻的 this 值。

生成器函数、异步生成器函数和异步普通函数跟普通函数行为是一致的,异步箭头函数与箭头函数行为是一致的。

  1. 由new调用? 绑定到新创建的对象。
  2. 由call或者apply(或者bind)调用? 绑定到指定的对象。
  3. 由上下文对象调用? 绑定到那个上下文对象。
  4. 默认:在严格模式下绑定到undefined,否则绑定到全局对象。 例外:箭头函数不适用以上四条规则,它会继承外层函数调用的 this 绑定(无论 this 绑定到什么)。

@charset 用于提示 CSS 文件使用的字符编码方式

@import 用于引入一个 CSS 文件,除了 @charset 规则不会被引入,@import 可以引入另一个文件的全部内容

class 选择器识别的是:用空格分隔的 class 语法。

link 标签一般用于看不见的链接,它可能产生超链接或者外部资源链接,a 和 area 一般用于页面上显示的链接,它们只能产生超链接。