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 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
通常来说,以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。
添加回答
举报
0/150
提交
取消