|
|
|
@ -47,10 +47,14 @@ o.showThis(); // o
@@ -47,10 +47,14 @@ o.showThis(); // o
|
|
|
|
|
|
|
|
|
|
如果将例子中的 showThis 函数改写为类中的方法,那么直接调用 showThis 方法的 this 的结果也会不同,这是因为 JavaScript 的 Class 被设计成了默认在严格模式下(use strict)执行,而严格模式下 this 指向会发生一些改变。 |
|
|
|
|
|
|
|
|
|
函数能够引用定义时的变量,函数也能记住定义时的 this,因此,函数内部必然有一个机制来保存这些信息,这个用来保存定义时上下文的机制就是私有属性 \[\[Environment\]\]。 |
|
|
|
|
|
|
|
|
|
在函数执行时,会创建一条执行环境记录,也就是函数定义时的上下文设置为函数的 \[\[Environment\]\],这个动作就是切换上下文,着一层一层形成的上下文就是函数的 **“作用域链”**。 |
|
|
|
|
this 是一个复杂的机制,JavaScript 标准定义了 \[\[ thisMode \]\] |
|
|
|
|
|
|
|
|
|
## 上下文栈 |
|
|
|
|
|
|
|
|
|
>JavaScript 引擎并非一行一行分析执行代码,而是一段一段的分析执行,当执行一段代码的时候会进行一些准备工作 |
|
|
|
|
|
|
|
|
|
函数能够引用定义时的变量,函数也能记住定义时的 this,因此,函数内部必然有一个机制来保存这些信息,这个用来保存定义时上下文的机制就是私有属性 \[\[Environment\]\]。 |
|
|
|
|
|
|
|
|
|
在函数执行时,会创建一条执行环境记录,也就是函数定义时的上下文设置为函数的 \[\[Environment\]\],这个动作就是切换上下文,无论函数以何种形式被调用,变量都会依照定义时的环境被查找出来。 |
|
|
|
|
|
|
|
|
|
JavaScript 用一个栈来管理执行上下文,当函数调用时,会入栈一个新的执行上下文,函数调用结束之后,执行上下文被出栈 |