为什么这在这两种情况下引用的关键字是不同的

why what keyword this references in these 2 situation is different?

本文关键字:关键字 是不同 引用 情况下 两种 为什么      更新时间:2023-09-26

>第一个代码

var object1 = {name: "my object", 
               ha: function() {
                      return this;
                   }
              }
object1.ha()  #=> Object {name: "my object", ha: function}

第二个代码

var object2 = {name: "my object2", 
               ha2: function() {
                      return function() {
                               return this;
                             }
                    }
              }
object2.ha()()  #=> window

因为 object2 中的this由于被放置在匿名函数中而失去了父对象的上下文,并且默认绑定到全局对象,在浏览器中,全局对象是window .

您可以通过本地化对象引用来补救它:

var object2 = {
    name : "my object2", 
    ha2  : function() { 
        var _this = this; // <-- here
        return function() { 
            return _this;
        } 
    } 
}

因为this不是一个变量,它是一个关键字,其值在运行时解析。它解析为创建其作用域的最近绑定对象。当您习惯于静态解决此问题的其他语言时,这会令人困惑。在您的示例中,运行函数时最近的绑定对象是 window。