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

关于Js中 this的一道题

关于Js中 this的一道题

哆啦的时光机 2019-05-25 17:30:37
varlength=10;functioncl(){console.log(this.length);}varo={length:20,show:function(fn){fn();arguments[0]();}}o.show(cl);//10关于这道题我想知道js中this不是谁调用就指向谁么?为什么第一次调用cl中的this还是指向window而不是o对象?我知道没有用call估计就不对了,但是为什么不对呢?第二个有为什么指向了arguments?同时这段代码在nodejs中运行时为什么第一次输出为undifined?
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

直接使用函数名字调用,无论你外面包了多少层,调用者就是window。
因为那个方括号运算符,方括号运算符作为对象取值运算,在某种意义上是可以等于点.运算符的,所以这里在形式上其实可以类比成arguments.0(),你看,这不就是arguments来调用了这个函数了嘛,所以运行的时候this就指向它了。
                            
查看完整回答
反对 回复 2019-05-25
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

this的指向不是在声明的时候确定的而是在调用的时候被定义的有这么几种情况
普通函数调用,this为全局对象或是undefined
作为对象的方法,this为那个对象
new表达式,this为以该函数为原型的新创建的对象
使用apply/call指定this
用bind绑定固定的this
事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)
不知道对你有没有帮助
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 446 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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