试题:this 指向问题

试题一

var name = "222"
var a = {
	name : "111",
	say : function(){
	console.log(this.name)
	}
}
var fun = a.say;
fun()// 222  此行代码提取出来就为 function(){console.log(this.name)},没有对象调用,因此此时this指向为window
a.say()// 111  对象a调用其say()函数,此时this指向就位a,因此此时打印出来的就是为对象a下的属性 
var b = {
	name :"333",
	say : function(fun){
		fun()
	}
}
b.say(a.say)// 222 此时将a.say,也就是函数作为实参传入到对象b内的say()函数,fun()在函数内部也是自己调用,没有对象调用,此时this仍然指向window 
b.say = a.say 
b.say()// 333 对象b调用say()函数,因此this指向b 

试题二

var foo = "123"
function print(){
	var foo = "456"
	this.foo = "789"//此时并没有对象调用函数print(),所以这里更改的的windoe的GO里面的foo值
	console.log(foo)// 456 此时打印的是自己AO里面的foo值!
}
print()
console.log(foo)// 789

试题三

var foo = "123"
function print(){
	this.foo = "789" //没有对象调用print()函数,所以此时this指向为window,所以将window上GO里面的foo值更改成了 789 
	console.log(foo)// 789 此时由于函数自己的AO内没有foo 属性,所以往上,找全局GO里面的foo值,所以这里打印出来的就是789 
}
print()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值