为了账号安全,请及时绑定邮箱和手机立即绑定

this?不明白

this?不明白

慕哥9229398 2019-06-12 09:04:11
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指向问题。
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

varfunc=obj.dbl;
func();
第一句把函数引用赋值给一个变量,会造成this丢失,所以func内部的this是指向全局对象的。所以函数内部this.val=>window.val=>val=>1。这三个是相等的。所以结果是:this.val=this.val*2=>2val=val*2=>4
val:4
this.val:4
                            
查看完整回答
反对 回复 2019-06-12
?
www说

TA贡献1775条经验 获得超8个赞

考虑了很久,执行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
                            
查看完整回答
反对 回复 2019-06-12
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信