File tree 2 files changed +44
-0
lines changed
2 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -186,6 +186,10 @@ export default defineConfig({
186
186
text : "冒泡与捕获" ,
187
187
link : "/javascript/grammar/bubbling" ,
188
188
} ,
189
+ {
190
+ text : "词法环境" ,
191
+ link : "/javascript/grammar/lexicalEnvironment" ,
192
+ } ,
189
193
] ,
190
194
} ,
191
195
] ,
Original file line number Diff line number Diff line change
1
+ ---
2
+ outline : deep
3
+ layout : doc
4
+ ---
5
+ 函数,块级,全局作用域都有一个被称为词法环境的内部隐藏的关联对象
6
+
7
+ ::: tip :rocket : 注意
8
+ 对象的{}不是一个词法环境
9
+ :::
10
+
11
+ 词法环境对象由两部分组成:
12
+
13
+ 1 . 环境记录(Environment Record) —— 一个存储所有局部变量作为其属性(包括一些其他信息,例如 ` this ` 的值)的对象。
14
+ 2 . 对 外部词法环境 的引用,与外部代码相关联。
15
+
16
+ 内部词法环境是动态的,但是外部词法环境的引用是创建时拿到的。因为this是内部词法环境的内容,所以this是可变的
17
+
18
+ ` 当代码要访问一个变量时 —— 首先会搜索内部词法环境,然后搜索外部环境,然后搜索更外部的环境,以此类推,直到全局词法环境 `
19
+
20
+ ## this指向规则
21
+ <img src =" https://s2.loli.net/2025/01/06/G7uqQCjTLR9OgWk.webp " >
22
+
23
+ ### 第三条
24
+ <img src =" https://s2.loli.net/2025/01/06/ER32HgnVFTuAzZ5.webp " >
25
+
26
+ ### 第五条
27
+ ``` js
28
+ let user = {
29
+ firstName: " John" ,
30
+ sayHi () {
31
+ alert (` Hello, ${ this .firstName } !` );
32
+ }
33
+ };
34
+
35
+ setTimeout (user .sayHi , 1000 ); // Hello, undefined!
36
+
37
+ // 等于
38
+ let f = user .sayHi ;
39
+ setTimeout (f, 1000 ); // 丢失了 user 上下文
40
+ ```
You can’t perform that action at this time.
0 commit comments