JavaScript 学习笔记 之 THIS (一) - 简介

关于this的误解

首先,this并不是像它的英语意思一样指向函数本身

来看个例子

function showThis(){
	this.count++;
	console.log(this.count);
}
showThis.count=0;
showThis();//NaN
console.log(showThis.count);//0

如果this指向调用函数本身的话

输出的应该是1才对,为什么调用时输出的是NaN和0呢?

这段代码中,showThis.count确实给showThis创造了一个count属性并赋值为0

但是执行函数的时候this指向的是window对象,也就是说调用的实际上是window.showThis() (因为showThis被声明在全局作用域)

 

第二种常见的误解是,this指向函数的作用域

首先确定一点,this在任何情况下都不指向函数的词法作用域

JavaScript中的作用域确实和对象类似,可见的标识符都是它的属性

但是作用域"对象"无法通过JavaScript代码访问,它存在在JavaScript引擎内部

this是什么

首先,this是在运行时进行绑定的,与作用域不同,作用域是在定义时绑定,与执行位置无关

因此,this的绑定和函数声明的位置没有任何关系,只跟调用函数的方式有关

当一个函数被调用时,会创建一个活动记录(执行上下文)

包括了函数在哪里调用(调用栈),调用方式,传入的参数等

this就是这个记录的一个属性

因此,this实际上是在函数被调用时发生的绑定,指向什么完全取决于函数在哪里被调

猜你喜欢

转载自blog.csdn.net/Aproducer/article/details/82504015