Skip to content

《你不知道的JavaScript(上)》笔记——关于this #44

@simpul

Description

@simpul

this 指向函数的作用域是一种常见的误解,this 在任何情况下都不指向函数的词法作用域。 在 JavaScript 内部, 作用域确实和对象类似, 可见的标识符都是它的属性。 但是作用域“对象” 无法通过 JavaScript代码访问, 它存在于 JavaScript 引擎内部

function foo() {
	var a = 2;
	this.bar(); // 调用 bar() 最自然的方法是省略前面的 this, 直接使用词法引用标识符。你不能使用 this 来引用一个词法作用域内部的东西。
}

function bar() {
	console.log( this.a );
}

foo(); // ReferenceError: a is not defined

每当你想要把 this 和词法作用域的查找混合使用时, 一定要提醒自己, 这是无法实现的。

this 的绑定和函数声明的位置没有任何关系, 只取决于函数的调用方式。

当一个函数被调用时, 会创建一个活动记录(有时候也称为执行上下文)。 这个记录会包含函数在哪里被调用(调用栈)、 函数的调用方法、 传入的参数等信息。 this 就是记录的其中一个属性, 会在函数执行的过程中用到。

Metadata

Metadata

Assignees

No one assigned

    Labels

    前端技术前端相关的一切内容(HTML,CSS,JS,框架等)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions