JavaScript 完全指南
从核心到实践 - 掌握现代 JavaScript 开发
JavaScript 如何运行代码
理解JavaScript引擎的执行过程、执行上下文和调用栈
🚀 **JavaScript 是如何工作的?**
当你写下一行JavaScript代码并运行它时,幕后发生了什么?
🎭 **三个核心概念:**
**1. JavaScript 引擎**
• V8 (Chrome, Node.js)
• SpiderMonkey (Firefox)
• JavaScriptCore (Safari)
就像汽车的发动机,JavaScript引擎负责"解释"和"执行"你的代码。
**2. 执行上下文 (Execution Context)**
想象一个"舞台",每次函数被调用时,都会搭建一个新舞台:
```javascript
// 全局执行上下文(主舞台)
let name = "Alice"
function greet() {
// 函数执行上下文(临时舞台)
let greeting = "Hello " + name
console.log(greeting)
}
greet() // 搭建临时舞台 → 表演 → 拆除舞台
```
每个执行上下文包含:
• **变量环境** - 存储变量和函数
• **作用域链** - 查找变量的路线
• **this 值** - 当前上下文的主角
**3. 调用栈 (Call Stack)**
就像一摞盘子(后进先出):
```javascript
function first() {
console.log("第一个")
second()
console.log("第一个结束")
}
function second() {
console.log("第二个")
third()
console.log("第二个结束")
}
function third() {
console.log("第三个")
}
first()
```
**调用栈的变化:**
1. [first] - first 入栈
2. [first, second] - second 入栈
3. [first, second, third] - third 入栈
4. [first, second] - third 执行完出栈
5. [first] - second 执行完出栈
6. [] - first 执行完出栈
🔍 **作用域链 (Scope Chain)**
变量查找就像找东西:先看房间,再看楼层,最后看整栋楼
```javascript
let building = "整栋楼的变量"
function floor() {
let floorVar = "楼层变量"
function room() {
let roomVar = "房间变量"
console.log(roomVar) // ✓ 房间里找到
console.log(floorVar) // ✓ 去楼层找到
console.log(building) // ✓ 去整栋楼找到
}
room()
}
```
💾 **内存管理**
• **栈内存** - 存储基本类型(数字、字符串等),像抽屉
• **堆内存** - 存储对象和数组,像仓库
• **垃圾回收** - 自动清理不用的内存,像定期打扫
```javascript
let number = 42 // 存在栈内存(抽屉)
let object = { x: 1 } // 对象存在堆内存(仓库)
// object 变量存栈内存,保存仓库地址
```
🎯 **关键要点:**
1. JavaScript 是**解释执行**的语言
2. 每次调用函数都会创建新的**执行上下文**
3. **调用栈**管理函数执行顺序(后进先出)
4. **作用域链**决定变量查找路径(从内到外)
5. 内存分为**栈**(基本类型)和**堆**(对象)
这就是 JavaScript 代码执行的底层机制!💻 代码练习区
在浏览器的开发者控制台(F12)中尝试这一章节的代码示例!
提示:按 F12 打开控制台,在 Console 标签页中输入代码进行练习🎯 实践:理解调用栈
在控制台中运行以下代码,观察执行顺序:
function first() {
console.log("1. 进入 first")
second()
console.log("4. first 结束")
}
function second() {
console.log("2. 进入 second")
third()
console.log("3. second 结束")
}
function third() {
console.log("2.5 执行 third")
}
first()📊 学习进度
已完成章节:0 / 11