对JS中this关键字的粗浅理解

谁调用,指向谁!
在哪个作用域下执行this就是指向哪个对象!

<script>
	console.log(this); //window (全局this指window)
	
	var age = 10;
	function foo () {console.log(this.age);};
	foo(); //10 (window对象调用foo函数,this指window)
	
	var obj1 = {"age" : 20,"foo" : foo}
	obj1.foo(); //20 (obj1对象调用foo函数,this指obj1)
	
	var obj2 = {"age" : 30,}
	obj2.foo = obj1.foo;
	obj2.foo(); //30 (obj2调用foo函数,this指obj2)
	
	// IIFE,window立即调用foo函数,this指window
	(function () {console.log(this.age);})(); //10
	
	// setInterval()/setTimeout()相当于window.setInterval()/window.setTimeout()
	// 所以是window调用
	// 但由于是异步,所以最后输出
	setTimeout(function () {
		console.log(this.age); //10 
	}, 1000);
			
	var obj3 = {
		age : 40,
		foo : function () {
			(function () {console.log(this.age);})();//10 (还是IIFE,window调用)
			setTimeout(function () {
				console.log(this.age); //10 (还是window调用,最后输出)
			}, 1000);
			console.log(this.age);
		}
	}
	obj3.foo(); //40 (obj3调用)
	
	var obj4 = {
		age : 60,
		foo : function(){return function(){console.log(this.age)};}
	};
	obj4.foo()(); //10
	// obj4.foo()返回了一个匿名函数
	// obj4.foo()()就变成了function()
	// 相当于在windo中执行这个匿名函数。
	// 因为这个匿名函数不是作为某个对象的方法来调用执行,所以this就指向window对象
</script>

总结:
1、全局this指window;
2、构造函数里的this指即将new的那个对象;
3、对象方法的this指向对象本身;
4、IIFE(立即执行函数表达式) this指window;
5、事件里的this指事件触发对象;
6、箭头函数没有自己的this;
7、定时器里的this指window;
8、匿名函数的执行环境具有全局性,匿名函数里的this指window;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值