在这里做了一个完整的噩梦,努力向自己解释为什么this
是window
对象?
(function () {
function get () {
alert(this);
}
get();
})();
我的理解是函数在JS中创建了范围,为什么它会引用window
对象?
答案 0 :(得分:7)
因为这是JavaScript的工作原理,barring strict mode。
除非您在其他对象上显式调用方法,否则 this
为window
。您发布的代码get
正在调用,没有明确的this
,因此会在window
上调用。
x.method() // "this" will be "x"
method() // "this" will be "window"
答案 1 :(得分:0)
this
的规则
按优先顺序排列:
new
调用该函数,例如var a = new method()
,导致this
成为新的空对象。call
,apply
或bind
使用特定上下文显式调用该函数,从而导致this
成为使用的上下文(例如{{ 1}}会导致method.call(y)
成为this
)y
会导致x.method()
成为this
)x
默认为全局对象。在严格模式下,this
将是未定义的。