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

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

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

摇曳的蔷薇 2019-08-21 18:02:16
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贡献1830条经验 获得超9个赞

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-08-21
?
胡子哥哥

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

考虑了很久,执行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-08-21
  • 2 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号