1

在这里做了一场彻头彻尾的噩梦,努力向自己解释为什么thiswindow对象?

(function () {

    function get () {
        alert(this);
    }

    get();

})();

我的理解是函数在 JS 中创建了作用域,为什么 this 指的是window对象?

4

2 回答 2

7

因为这就是 JavaScript 的工作方式,除非是严格模式

this除非window您显式调用不同对象的方法。您发布的代码get是在没有明确调用的情况下调用的this,因此它是在window.

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

method() // "this" will be "window"
于 2013-10-11T18:37:18.593 回答
0

thisJavascript中的判断规则

按优先顺序:

  • 该函数被调用new,例如var a = new method(),导致this成为一个新的空对象。
  • 使用特定上下文显式调用该函数,使用callapplybind,导致this成为使用的上下文(例如method.call(y),将导致this成为y
  • 函数被一个对象调用,导致函数的上下文成为调用对象(例如x.method()会导致thisbe x
  • 在非严格模式下this,如果不满足其他规则,则默认为全局对象。在严格模式下,this将是未定义的。
于 2013-10-11T19:08:01.163 回答