如何深入理解JavaScript中的this关键字?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2538个文字,预计阅读时间需要11分钟。
在理解JavaScript中的this之前,首先需要了解作用域。作用域分为两种:
1. 词法作用域(Lexical Scope): 引擎在当前作用域或嵌套的作用域中查找具有该名称的变量。引擎从当前作用域开始查找,如果找不到,它会逐级向上查找,直到全局作用域。
2. 语句作用域(Statement Scope): JavaScript 中的变量声明(如 let 和 const)使用语句作用域,而变量声明(如 var)使用函数作用域。
当引用变量时,引擎会查找和变量名称相匹配的标识符,并确定它在哪里声明。如果变量在当前作用域中声明,则直接使用它;如果在当前作用域中找不到,引擎会逐级向上查找,直到全局作用域。
在理解javascript的this之前,首先先了解一下作用域。
作用域分为两种:
- 1、词法作用域:引擎在当前作用域或者嵌套的子作用域查找具有名称标识符的变量。(引擎如何查找和在哪查找。定义过程发生在代码书写阶段)
- 2、动态作用域:在运行时被动态确定的作用域。
词法作用域和动态作用域的区别是:词法作用域是在写代码或定义时确定的;动态作用域是在运行时确定的。
this的绑定规则
this是在调用时被绑定,取决于函数的调用位置。由此可以知道,一般情况下(非严格模式下),this都会根据函数调用(调用栈)的上下文来绑定对象。
一、默认绑定
默认绑定:默认绑定是指在非严格模式下,且没有使用别的绑定规则时,this根据函数调用(调用栈)的上下文来绑定对象(全局对象)。
本文共计2538个文字,预计阅读时间需要11分钟。
在理解JavaScript中的this之前,首先需要了解作用域。作用域分为两种:
1. 词法作用域(Lexical Scope): 引擎在当前作用域或嵌套的作用域中查找具有该名称的变量。引擎从当前作用域开始查找,如果找不到,它会逐级向上查找,直到全局作用域。
2. 语句作用域(Statement Scope): JavaScript 中的变量声明(如 let 和 const)使用语句作用域,而变量声明(如 var)使用函数作用域。
当引用变量时,引擎会查找和变量名称相匹配的标识符,并确定它在哪里声明。如果变量在当前作用域中声明,则直接使用它;如果在当前作用域中找不到,引擎会逐级向上查找,直到全局作用域。
在理解javascript的this之前,首先先了解一下作用域。
作用域分为两种:
- 1、词法作用域:引擎在当前作用域或者嵌套的子作用域查找具有名称标识符的变量。(引擎如何查找和在哪查找。定义过程发生在代码书写阶段)
- 2、动态作用域:在运行时被动态确定的作用域。
词法作用域和动态作用域的区别是:词法作用域是在写代码或定义时确定的;动态作用域是在运行时确定的。
this的绑定规则
this是在调用时被绑定,取决于函数的调用位置。由此可以知道,一般情况下(非严格模式下),this都会根据函数调用(调用栈)的上下文来绑定对象。
一、默认绑定
默认绑定:默认绑定是指在非严格模式下,且没有使用别的绑定规则时,this根据函数调用(调用栈)的上下文来绑定对象(全局对象)。

