JavaScript采用解释+JIT混合执行模型,经词法分析、语法分析、字节码生成与热点编译;执行依赖上下文、作用域链、调用栈和事件循环协同,微任务优先于宏任务执行。
JavaScript 是一门解释执行的动态语言,但它并非传统意义上的“边读边解释”,现代浏览器(如 Chrome、Edge)和 Node.js 实际上采用解释 + 即时编译(JIT)混合执行模型。它的运行过程远比“直接执行代码”复杂,核心围绕引擎、上下文、调用栈、事件循环展开。
当你打开网页或运行 node script.js,JS 引擎(如 V8)会立即开始工作:
const、name、=、"Alice")
语法分析(Parsing):用 token 构建抽象语法树(AST),检查语法是否合法每段 JS 代码都在某个执行上下文(Execution Context)中运行。它分为三个阶段:
this、建立词法环境(含变量对象/声明提升)、初始化作用域链作用域链是查找变量的路径:当前作用域 → 外层函数作用域 → 全局作用域。闭包正是靠这个链“捕获”并保留外层变量的引用。
JavaScript 是单线程语言,但能处理异步操作,关键靠两个机制配合:
RangeError
setTimeout、微任务如 Promise.then)中取出回调,压入调用栈执行Promise.then 比 setTimeout 更快)以这段代码为例:
console.log('start');
setTimeout(() => console.log('timeout'), 0);
Promise.resolve().then(() => console.log('promise'));
console.log('end');
执行顺序是:start → end → promise → timeout。原因如下:
console.log)立即入栈执行setTimeout 注册宏任务,进宏任务队列Promise.then 注册微任务,进微任务队列promise)setTimeout 回调),输出 timeout
不复杂但容易忽略:JS 执行不是“一行行往下跑”,而是由引擎调度、上下文隔离、栈式管理和事件循环驱动的系统性过程。理解它,才能真正看懂异步、闭包、this 绑定和内存表现。