为什么`this`是这个JavaScript中的Window对象?

时间:2013-10-11 18:36:13

标签: javascript

在这里做了一个完整的噩梦,努力向自己解释为什么thiswindow对象?

(function () {

    function get () {
        alert(this);
    }

    get();

})();

我的理解是函数在JS中创建了范围,为什么它会引用window对象?

2 个答案:

答案 0 :(得分:7)

因为这是JavaScript的工作原理,barring strict mode

除非您在其他对象上显式调用方法,否则

thiswindow。您发布的代码get正在调用,没有明确的this,因此会在window上调用。

x.method() // "this" will be "x"

method() // "this" will be "window"

答案 1 :(得分:0)

在Javascript

中确定this的规则

按优先顺序排列:

  • 使用new调用该函数,例如var a = new method(),导致this成为新的空对象。
  • 使用callapplybind使用特定上下文显式调用该函数,从而导致this成为使用的上下文(例如{{ 1}}会导致method.call(y)成为this
  • 该对象调用该函数,导致该函数的上下文成为调用对象(例如y会导致x.method()成为this
  • 在非严格模式下,如果没有满足其他规则,则x默认为全局对象。在严格模式下,this将是未定义的。