有没有人遇到过这个问题哈!一个关于this问题

window.val=1;
varobj={
val:2,
dbl:function(){
this.val*=2;
val*=2;
console.log('val:',val);
console.log('this.val:',this.val);
}
};
//说出下面的输出结果
obj.dbl();
varfunc=obj.dbl;
func();
这个问题我知道放在console中运行去答案,想要的分析this指向问题。
摇曳的蔷薇
浏览 285回答 2
2回答

慕标琳琳

varfunc=obj.dbl;func();第一句把函数引用赋值给一个变量,会造成this丢失,所以func内部的this是指向全局对象的。所以函数内部this.val=>window.val=>val=>1。这三个是相等的。所以结果是:this.val=this.val*2=>2val=val*2=>4val:4this.val:4

胡子哥哥

考虑了很久,执行obj.dbl()时,this.val的this指向obj,而下一行的val指向window。所以,由window.val输出2,obj.val输出4,最后一行func();的调用者是window,所以,现在的this.val的this指向window,刚刚window.val已经是2了,所以现在this.val=2;的执行结果就是4,然后val=2;的执行结果,就是8了。所以,最终的结果就是输出2、4、8、8
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript