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

this指向问题

this指向问题

守候你守候我 2019-01-30 14:26:29
var x = 1;var kit = {    x: 2,    buf: {        x: 3,        fac: function() {            return this.x;        }    }}var kbf = kit.buf.fac;console.log(kbf());//1console.log(kit.buf.fac());//3不明白这两个的区别?kbf()调用的this指向什么?kit.buf.fac()的this指向什么?求大神们赐教
查看完整描述

1 回答

?
达令说

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

首先你全局定义了kbf,此时它的执行环境是window也就是全局,那么当你把kit.buf.fac赋给kbf的时候,通过kbf去调用这个对象的时候,fac这个函数的执行环境也就变成了window,那么当执行return this.x的时候,浏览器会去查找全局的x而不是kit的局部x。
而当你通过buf去调用它的属性fac的时候,因为buf是kit内部的一个属性,执行环境在kit内,那么当执行到return this.x的时候,它会先在内部找x,如果内部无x,则会找外部,直到全局。在这里,内部有局部x,所以返回的是局部x的值。
这是我直接的理解,可能有些地方说的不对,能理解最好把。建议你去看看高程的this和你不知道的this

查看完整回答
反对 回复 2019-01-31
  • 1 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信