diff --git a/src/router/modules/demo.ts b/src/router/modules/demo.ts
index 0c7b1d3..eefa6e4 100644
--- a/src/router/modules/demo.ts
+++ b/src/router/modules/demo.ts
@@ -198,6 +198,10 @@ const titleArr = [
key: 'jsEventLoop',
title: 'js事件循环',
},
+ {
+ key: 'jsHoistingScope',
+ title: 'js中变量提升与作用域',
+ },
];
// @/views/demo/**/*.vue
diff --git a/src/views/demo/jsHoistingScope/index.vue b/src/views/demo/jsHoistingScope/index.vue
new file mode 100644
index 0000000..c032420
--- /dev/null
+++ b/src/views/demo/jsHoistingScope/index.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/src/views/demo/jsHoistingScope/jsHoistingScope.md b/src/views/demo/jsHoistingScope/jsHoistingScope.md
new file mode 100644
index 0000000..e97b2db
--- /dev/null
+++ b/src/views/demo/jsHoistingScope/jsHoistingScope.md
@@ -0,0 +1,83 @@
+# JS 变量提升与作用域 (Hoisting & Scope)
+
+## 知识点总结
+
+### 1. 变量提升 (Hoisting)
+JavaScript 代码在执行前会先进行编译。在编译阶段,变量和函数的声明会被移动到其所在作用域的顶部。
+
+* **var 声明**: 变量会被提升,但赋值不会。初始值为 `undefined`。
+* **let/const 声明**: 也会被提升,但在声明之前访问会触发“暂时性死区 (TDZ)”。
+* **函数声明**: 整个函数体都会被提升(函数声明优先于变量声明)。
+
+### 2. 作用域 (Scope)
+作用域决定了代码中变量和其他资源的可见性。
+
+* **全局作用域**: 脚本中任何地方都能访问。
+* **函数作用域**: 变量仅在函数内部可见。
+* **块级作用域**: `let` 和 `const` 引入。变量仅在 `{}` 块内可见。
+
+### 3. 作用域链 (Scope Chain)
+当在一个作用域中使用变量时,JavaScript 引擎会首先在当前作用域查找,如果没有找到,就向上一级作用域查找,直到找到或到达全局作用域。
+
+## 代码演示
+
+### 收集题目
+```javascript
+let outerValue = 'outer'; //let声明的变量不会挂在全局window上
+function outer() {
+ function inner() {
+ const arrowFunc = () => console.log(this.outerValue);
+ arrowFunc();
+ }
+ inner();
+}
+outer();
+
+// undefined
+```
+
+```javascript
+var outerValue = 'outer';
+function outer() {
+ function inner() {
+ const arrowFunc = () => console.log(this.outerValue);
+ arrowFunc();
+ }
+ inner();
+}
+outer();
+
+// outer
+```
+
+### 变量提升演示
+```javascript
+console.log(a); // undefined
+var a = 1;
+
+try {
+ console.log(b); // ReferenceError
+ let b = 2;
+} catch (e) {
+ console.log(e);
+}
+
+foo(); // "hello"
+function foo() {
+ console.log("hello");
+}
+```
+
+### 作用域链演示
+```javascript
+var x = 10;
+function outer() {
+ var y = 20;
+ function inner() {
+ var z = 30;
+ console.log(x + y + z); // 60
+ }
+ inner();
+}
+outer();
+```
diff --git a/src/views/tool/jsCoreNav.vue b/src/views/tool/jsCoreNav.vue
index f91de29..cac7054 100644
--- a/src/views/tool/jsCoreNav.vue
+++ b/src/views/tool/jsCoreNav.vue
@@ -114,7 +114,7 @@ const getThemeColor = (index: number, type: 'main' | 'border' | 'text') => {
const navList = ref([
{
title: '变量提升与作用域',
- path: '/js/scope-hoisting',
+ path: '/demo/jsHoistingScope',
desc: '执行上下文、词法作用域与 var/let/const 的底层差异。',
},
{