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

新手上路,js this问题

新手上路,js this问题

12345678_0001 2019-09-09 20:01:06
varlength=20;functionfn(){console.log(this.length);}varobj={length:10,api:function(fn){fn();arguments[0]();}}obj.api(fn,2)为何fn()输出的是20,argument[0]()输出的是2;fn()的当前上下文不是obj.api吗?
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

通常来说,以A.B()或A[B]()的方式调用B,那么在B函数中,this是A。
以B()的方式调用,严格模式下没有this。非严格模式下this是全局环境。
到你这里,子啊obj.api()的函数体里,this是obj。但是,由于通过fn()的方式调用fn(),在该次调用中,fn中this是全局环境,输出全局变量length,也就是20。
通过arguments[0]()的方式调用fn(),fn中this是arguments,fn()中的this.length是arguments.length,也就是2。
                            
查看完整回答
反对 回复 2019-09-09
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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