如何深入理解JavaScript中的this关键字?

更新于
2026-10-01 15:13:42
2阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2538个文字,预计阅读时间需要11分钟。

如何深入理解JavaScript中的this关键字?

在理解JavaScript中的this之前,首先需要了解作用域。作用域分为两种:

1. 词法作用域(Lexical Scope): 引擎在当前作用域或嵌套的作用域中查找具有该名称的变量。引擎从当前作用域开始查找,如果找不到,它会逐级向上查找,直到全局作用域。

2. 语句作用域(Statement Scope): JavaScript 中的变量声明(如 let 和 const)使用语句作用域,而变量声明(如 var)使用函数作用域。

当引用变量时,引擎会查找和变量名称相匹配的标识符,并确定它在哪里声明。如果变量在当前作用域中声明,则直接使用它;如果在当前作用域中找不到,引擎会逐级向上查找,直到全局作用域。

在理解javascript的this之前,首先先了解一下作用域。

作用域分为两种:

  1. 1、词法作用域:引擎在当前作用域或者嵌套的子作用域查找具有名称标识符的变量。(引擎如何查找和在哪查找。定义过程发生在代码书写阶段)
  2. 2、动态作用域:在运行时被动态确定的作用域。

词法作用域和动态作用域的区别是:词法作用域是在写代码或定义时确定的;动态作用域是在运行时确定的。

this的绑定规则

this是在调用时被绑定,取决于函数的调用位置。由此可以知道,一般情况下(非严格模式下),this都会根据函数调用(调用栈)的上下文来绑定对象。

一、默认绑定

默认绑定:默认绑定是指在非严格模式下,且没有使用别的绑定规则时,this根据函数调用(调用栈)的上下文来绑定对象(全局对象)。

阅读全文

本文共计2538个文字,预计阅读时间需要11分钟。

如何深入理解JavaScript中的this关键字?

在理解JavaScript中的this之前,首先需要了解作用域。作用域分为两种:

1. 词法作用域(Lexical Scope): 引擎在当前作用域或嵌套的作用域中查找具有该名称的变量。引擎从当前作用域开始查找,如果找不到,它会逐级向上查找,直到全局作用域。

2. 语句作用域(Statement Scope): JavaScript 中的变量声明(如 let 和 const)使用语句作用域,而变量声明(如 var)使用函数作用域。

当引用变量时,引擎会查找和变量名称相匹配的标识符,并确定它在哪里声明。如果变量在当前作用域中声明,则直接使用它;如果在当前作用域中找不到,引擎会逐级向上查找,直到全局作用域。

在理解javascript的this之前,首先先了解一下作用域。

作用域分为两种:

  1. 1、词法作用域:引擎在当前作用域或者嵌套的子作用域查找具有名称标识符的变量。(引擎如何查找和在哪查找。定义过程发生在代码书写阶段)
  2. 2、动态作用域:在运行时被动态确定的作用域。

词法作用域和动态作用域的区别是:词法作用域是在写代码或定义时确定的;动态作用域是在运行时确定的。

this的绑定规则

this是在调用时被绑定,取决于函数的调用位置。由此可以知道,一般情况下(非严格模式下),this都会根据函数调用(调用栈)的上下文来绑定对象。

一、默认绑定

默认绑定:默认绑定是指在非严格模式下,且没有使用别的绑定规则时,this根据函数调用(调用栈)的上下文来绑定对象(全局对象)。

阅读全文