此关键字如何在成员函数中嵌套的函数中起作用?

时间:2018-07-29 07:10:27

标签: javascript this

您好,我正在学习JavaScript,并且试图了解'this'关键字的方式。

说我有以下JavsScript代码:

var a = function(){
    console.log('this value for function a:');
    console.log(this);
}


var obj = {
    name: 'Object1',
    objFunc: function(){
        console.log('this value for function objFunc in Object1:');
        console.log(this);

        var nestedFunc = function(){
            console.log('this value for nested function nestedFunc in Object1:');
            console.log(this);
        }

        nestedFunc();
    }
}

a();
obj.objFunc();

结果如下:

  • 函数a的此值:“窗口”对象(全局对象)
  • Object1中的objFunc函数的此值:对象'Object1'
  • Object1中的嵌套函数nestedFunc的此值:“ Window”对象(全局对象)

结果1,2对我来说很有意义。

  • 在检查Window对象时,a()是作为对窗口全局对象的方法创建的函数,因此这里的“ this”指向它。
  • 在检查Object1对象时,objFunc()是在Object1对象上作为方法创建的函数,因此这里的“ this”指向它。

但是我不明白为什么对象'Object1'中嵌套func的第三个结果指向Window。

在控制台中,如果我检查Window对象并检查其属性,则会看到它具有a()的字段,因此我可以看到为什么a()的“ this”将指向Window。类似地,当我检查对象'Object1'并检查其属性时,有一个objFunc()字段,因此我可以看到objFunc()的'this'为何指向Object1。

我的问题是:

  1. 我在Window对象中看不到nestedFunc()的字段,那么为什么nestedFunc()中的'this'指向Window对象?
  2. 尽管在Object1对象中没有为nestedFunc()创建单独的属性,但nestedFunc()函数是在Object1中创建的,为什么“这”不指向Object1而不是窗口?

编辑:我认为我的问题已经by this website得到了回答。据我了解,闭包无法使用this关键字访问外部函数的“ this”变量,因为“ this”变量只能由函数本身访问,而不能由内部函数访问。因此,嵌套函数的“ this”将是未定义的,因此将被设置为全局对象

0 个答案:

没有答案