JavaScript 执行机制:小白也能秒懂!
2024-02-06 03:18:12
JavaScript 执行机制概述
JavaScript 是一种单线程语言,这意味着它一次只能执行一个任务。为了避免阻塞主线程,JavaScript 使用了事件循环 (event loop) 机制来处理异步任务。事件循环会不断地轮询 (poll) 事件队列 (event queue),如果有新的事件到来,则会将其添加到事件队列中。一旦事件队列中有事件需要处理,JavaScript 引擎就会从事件队列中取出事件并执行它。
同步任务和异步任务
在 JavaScript 中,任务分为同步任务和异步任务。同步任务是指立即执行的任务,而异步任务是指需要等待一段时间才能执行的任务。同步任务会在主线程上执行,而异步任务会在事件队列中等待执行。
常见的同步任务包括:
- 变量声明和赋值
- 函数调用
- 算术运算
- 字符串拼接
- 数组操作
常见的异步任务包括:
- AJAX 请求
- 定时器 (setTimeout、setInterval)
- 事件监听器 (click、mouseover)
- I/O 操作 (文件读写)
call stack 和 event queue
call stack (调用栈) 是一个后进先出 (LIFO) 栈,它存储着当前正在执行的函数。当一个函数被调用时,它会被压入 call stack 中。当函数执行完毕后,它会被从 call stack 中弹出。
event queue (事件队列) 是一个先进先出 (FIFO) 队列,它存储着需要执行的事件。当一个事件发生时,它会被添加到 event queue 中。JavaScript 引擎会不断地轮询 event queue,如果有新的事件到来,则会将其添加到 event queue 中。一旦 event queue 中有事件需要处理,JavaScript 引擎就会从 event queue 中取出事件并执行它。
callback 和 promise
callback 是一个函数,它会在另一个函数执行完成后被调用。callback 可以用来处理异步任务的结果。
promise 是一个对象,它表示一个异步操作的状态。promise 可以有三种状态:pending、fulfilled 和 rejected。pending 表示异步操作正在进行中,fulfilled 表示异步操作已成功完成,rejected 表示异步操作已失败。
promise 可以用来处理异步任务的结果,并且可以链式调用。链式调用是指在一个 promise 中调用另一个 promise,这样可以使代码更加简洁和可读。
总结
JavaScript 的执行机制是基于事件循环的。事件循环会不断地轮询事件队列,如果有新的事件到来,则会将其添加到事件队列中。一旦事件队列中有事件需要处理,JavaScript 引擎就会从事件队列中取出事件并执行它。
JavaScript 中的任务分为同步任务和异步任务。同步任务会在主线程上执行,而异步任务会在事件队列中等待执行。
call stack 和 event queue 是 JavaScript 执行机制中的两个重要数据结构。call stack 存储着当前正在执行的函数,而 event queue 存储着需要执行的事件。
callback 和 promise 是 JavaScript 中处理异步任务结果的两种常用方法。callback 是一个函数,它会在另一个函数执行完成后被调用。promise 是一个对象,它表示一个异步操作的状态。