猿问

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指向问题。
慕哥9229398
浏览 160回答 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

www说

考虑了很久,执行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

相关分类

JavaScript
我要回答