欢迎光临散文网 会员登陆 & 注册

千锋教育web前端高频面试题视频教程,kerwin大话前端面试秘籍(附答案)

2023-07-17 01:55 作者:王老狗啊  | 我要投稿

同步&异步

1、同步任务

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务

2、异步任务

异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行

3、js异步操作包括:

  1. 定时器
  2. 事件绑定
  3. 回调函数可以理解为异步(不是严谨的异步操作)
  4. AJAX中一般我们都采取异步操作(也可以同步)
  5. new Promise中的resolve()

4、同步和异步运行机制

  • 有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
  • 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
  • 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  • 主线程不断重复上面的第三步。只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

事件循环

简单来说,JS 的事件循环(Event Loop)机制,决定了什么时候该执行哪一行代码。虽然 JS 是单线程的,但浏览器是多线程的,所以 JS 借助浏览器提供的能力,实现了 JS 的异步编程(比如 setTimeout 方法)。如果没有 JS 事件循环,则当浏览器执行一段耗时的 JS 同步代码时,就没有办法及时响应用户的其他操作,从而给用户带来不好的体验。

  • 事件循环负责收集事件(如mousemove、setTimeout等),并对事件触发的回调任务进行排队以便在合适的时候执行。先执行宏任务,然后是微任务,然后在开始下一次循环之前执行一些必要的渲染,如此循环往复。

JS 的事件循环主要由这几部分组成:调用栈、web API、微任务队列、宏任务队列调用栈

JS 调用栈(Call Stack)是一个用于记录函数调用的数据结构,它遵循先进后出的原则(LIFO)。当一个函数被调用时,它的执行上下文(包括函数参数、局部变量等)被添加到调用栈的顶部。当函数执行完毕时,它的执行上下文被从调用栈中弹出,控制权回到调用该函数的上一个执行上下文。

web API

JS 的 Web API 是浏览器提供的一组 API,用于与浏览器环境交互,包括 DOM、XMLHttpRequest、Fetch、setTimeout 等。这些 API 不是 JS 语言本身的一部分,而是浏览器提供的扩展,通过这些 API 可以让 JS 与浏览器环境进行交互。

微任务宏任务

微任务队列

微任务队列用于存放微任务,它遵循先进先出的原则(FIFO)。当一个微任务被调度时,它被添加到微任务队列的末端,排队等待 JS 主线程的执行。

宏任务队列

宏任务队列用于存放宏任务,它遵循先进先出的原则(FIFO)。当一个宏任务被调度时,它被添加到宏任务队列的末端,排队等待 JS 主线程的执行。

千锋教育web前端高频面试题视频教程,kerwin大话前端面试秘籍(附答案)的评论 (共 条)

分享到微博请遵守国家法律