this的绑定(四种绑定)

this的默认绑定

当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象

例子1:

function foo(){
	console.log(this===window)
}
foo();//true

重点:迷惑性的例子

function fn(){
	function fn1(){
		console.log(this===window);
	}
	fn1();
}
fn();//true

函数fn1在一个外部函数fn里面声明并且调用了,他的this依然指向window,因为【没有明确的调用对象时,讲对函数的this使用默认绑定:绑定到全局的window对象】


加强版迷惑例子:

var obj = {
	fn:function(){
		function innerfn(){
			console.log(this===window);
		}
		innerfn();//独立调用
	}
}
obj.fn();//true

 这里例子中,obj.fn()调用实际上是用了this的隐式绑定

【总结】凡是函数作为独立函数调用,无论它的位置在哪,它行为表现都和直接在全局环境中调用无异

this的隐式绑定

当函数被一个对象所“包含”的时候,我们称函数的this被隐式绑定到这个对象里面,这时候,通过this可以直接访问所绑定的对象里面的其他属性

例子:

var obj = {
	a:1,
	fn:function(){
		console.log(this);
		function fn1(){
			console.log(this);
		}
		fn1();
	}
}
obj.fn();

结果

猜你喜欢

转载自www.cnblogs.com/chorkiu/p/10374205.html