刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁。经过一段时间的了解,我想跟大家分享下自己的理解。
what's this? 浅谈js中this的指向问题

何时出现this

函数在调用的时候,会自动获得两个特殊变量:this和arguments,所以,函数可以调用this变量。

this指向谁?

通过一段时间的练习,我觉得可以总结为一句话:this指向他所在函数的作用域对象。如果函数是定义在全局作用域的,那么this指向window,如果函数被某个自定义对象调用,那么this就指向该对象。下面我们通过几个场景进行理解:

  1. 场景一:定义在全局作用域
function test(){
	alert(this);
   }
   test();

结果:
what's this? 浅谈js中this的指向问题
2. 场景二:被某个对象调用

var O = {
	f : function(){
		alert(this);
	}
}
O.f();

结果:
what's this? 浅谈js中this的指向问题
3. 场景三:闭包

var object = {
	getThis : function(){
		return function(){
			return this;
		}
	}
}
alert(object.getThis()());

结果:
what's this? 浅谈js中this的指向问题

var object = {
	getThis : function(){
		var that = this;
		return function(){
			return that;
		}
	}
}
alert(object.getThis()());

结果:
what's this? 浅谈js中this的指向问题
对场景三的解释说明:大家都清楚闭包的一个特点是可以保留外部函数的变量对象,在场景三的第二个里,我们使用that保存了this的值,this指向object对象,所以that也指向object对象。

总结

其实this的问题并不复杂,我们只要记住,this指向函数所在作用域的作用域对象,然后平时多练习,就可以知道this指向谁了。

相关文章:

  • 2021-09-30
  • 2021-09-19
  • 2021-06-03
猜你喜欢
  • 2021-10-06
  • 2022-12-23
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-17
相关资源
相似解决方案