猿问

this指向问题

var x = 1;
var kit = {
    x: 2,
    buf: {
        x: 3,
        fac: function() {
            return this.x;
        }
    }
}
var kbf = kit.buf.fac;
console.log(kbf());//1
console.log(kit.buf.fac());//3
不明白这两个的区别?kbf()调用的this指向什么?kit.buf.fac()的this指向什么?
求大神们赐教

守候你守候我
浏览 385回答 1
1回答

达令说

首先你全局定义了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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答