|
|
|
@ -56,6 +56,13 @@ this 是一个复杂的机制,JavaScript 标准定义了 \[\[ thisMode \]\]
@@ -56,6 +56,13 @@ this 是一个复杂的机制,JavaScript 标准定义了 \[\[ thisMode \]\]
|
|
|
|
|
|
|
|
|
|
JavaScript 提供了可以操作 this 的内置函数,如 Function.prototype.call 和 Function.prototype.apply,它们可以指定函数调用时传入的 this,除此之外还有 Function.prototype.bind,它可以返回一个更改了 this 的函数,它们甚至可以应用在箭头函数中,但是它并不会修改 this,仅仅实现了传参的能力。 |
|
|
|
|
|
|
|
|
|
Kyle Simpson 关于 this 的总结: |
|
|
|
|
1. 如果由new调用 - 绑定到新创建的对象 |
|
|
|
|
2. 如果由 call、apply 或 bind调用 - 绑定到指定的对象 |
|
|
|
|
3. 如果由上下文对象调用 - 绑定到那个上下文对象 |
|
|
|
|
4. 其他调用情况 - 严格模式下会绑定到 undefined,非严格模式绑定到全局对象 |
|
|
|
|
5. 以上情况对于箭头函数都不适用,它会继承外层函数的 this 绑定 |
|
|
|
|
|
|
|
|
|
## 上下文栈 |
|
|
|
|
|
|
|
|
|
>JavaScript 引擎并非一行一行分析执行代码,而是一段一段的分析执行,当执行一段代码的时候会进行一些准备工作 |
|
|
|
|