JS中 this 到底指向谁?

JS中的 this 到底指向谁?

关于this的指向,确实是一个使人头疼的问题,那么this到底指向谁呢?数组

归根到底一句话:谁调用了包含this的方法,那么this就指向谁bash

关于这点,咳咳咳...有以下三个观点:app

1.this指向的,永远只多是对象!函数

2.this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用。ui

3.this指向的对象,咱们称之为函数的上下文context,也叫函数的调用者。this

  • 在全局中,经过函数名直接调用,this就指向window

以下:spa

function Test(){

}
Test()
复制代码

此时,this就指向windowcode

  • 经过对象.函数名()调用的:this就指向这个对象

以下:对象

let Test = {
	name:"Fan",
	say:function(){
		console.log(this.name)
	}
}
Test.say()	//Fan
复制代码

此时,this就指向Test作用域

不过,匿名函数(好比:定时器)具备全局性,所以this对象一般也指向window

  • 函数做为数组的一个元素,经过数组下标调用的,this指向这个数组

以下:

function Test(){
	console.log(this);
}

let arr = [Test,1,2];
arr[0]();
复制代码

此时,this就指向arr

  • 函数做为window内置函数的回调函数调用时,this就指向window,好比:setInterval setTimeout 等)

以下:

function Test(){
	console.log(this);
}

setTimeout(Test,1000);
// setInterval(Test,1000);
复制代码

此时,this就指向window

  • 函数做为构造函数,用new关键字调用时,this指向新new出的对象

以下:

function Test(){
	console.log(this);
}

let obj = new Test();
复制代码

此时,this就指向obj

  • 若是使用 call、apply、bind绑定对象,那么this就指向那个绑定的对象

  • 箭头函数

箭头函数比较特殊,由于箭头函数内部没有this,this指向外层最近的调用者,简单的说,就是须要向上找一级

  • 箭头函数在调用时,不会生成自身做用域下的this和arguments
  • 不像普通函数同样在调用时自动获取this,而是沿着做用域链向上查找,找到最近的外部一层做用域的this,并获取
  • 在定义对象的方法/具备动态上下文的回调函数/构造函数中都不适用

^_<

相关文章
相关标签/搜索