js作用域链和闭包中的this的问题?
 var name = 'the window';
    var object = {
        name: 'my object',
        getNameFunc: function () {
            console.log(this === window)     // false
            return function () {
                /** 此处的作用域链应该是什么样子
                 * 为什么这个地方的this变成了window而不是object
                 */
                console.log(this === window)  // true
                return this.name;
            }
        },
        test: function () {
            var name = this.getNameFunc()()
            return name;
        }
    };
    console.log(object.test())  // the window

2个回答

this是调用函数的对象,和作用域链或闭包都没有关系

var name = this.getNameFunc()()
等同
var x = this.getNameFunc();
var name = x()

this.getNameFunc()这样调用时,getNameFunc是以this对象的方法调用的,会把 . 前面的this对象传递给getNameFunc内的this
而 x() 是直接调用的。对于直接调用的函数,在非严格模式下函数内的this默认值就是window,严格模式下是undefined

this指向作用域,
个人见解,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问