【《你不知道的JS(上卷②)》】一、关于this

一、关于this:

一)、为什么要用this?

function identity() {
	return this.name.toUpperCase();
}

var me = {
	name: "Kyle"
};

var you = {
	name: "Reader"
};

identity.call(me); // Kyle
identity.call(you); // Reader

​ 观察上面的代码,使用了this,identity函数就不再需要为每一个对象编写不同版本的函数。

回想之前学习的词法作用域,如果我们想要使用词法作用域来完成类似的功能,应该这样写:

// 显式传入一个上下文对象
function identity(context) {
	return context.name.toUpperCase();
}
// ...
identity(me); // Kyle
identity(you); // Reader

显然,使用this的写法更加优雅。它的作用就是隐式“传递”一个对象引用。

二)、关于this的说明:

1、this并不指向函数自身:

JS中函数是一个对象,因此是可以在调用函数时存储状态的,但是this并不会指向函数本身。

2、this的作用域:

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

  • this无法与词法作用域共存!

三)、this到底是什么:

​ this是 动态作用域的表亲,this的绑定与函数声明的位置无关,而是取决于函数的调用方式。

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

原文地址:https://www.cnblogs.com/enmac/p/13122359.html