function foo() {
"use strict";
console.log( this.a );
}
var a = 2;
foo(); // TypeError: Cannot read property 'a' of undefined
// --------------------------------------
function foo() {
console.log( this.a );
}
var a = 2;
(function() {
"use strict";
foo(); // 2
})();
请问,以上代码为什么第一部分this指向undefined,第二部分却指向window?
(本回答不讨论箭头函数)
函数的里的
this
,是由如何调用决定的。一般a.foo()
调用的时候,那么就是a
。如果没有
a
呢?这时要看被调用函数定义是否处于严格模式(与调用语句是否严格模式无关)。如果定义在严格模式,那么this
是undefined
。否则,一般就是全局对象了(比如浏览器里的 window)例子里的第一个,
foo
定义是严格模式。第二个,foo
定义并不是严格模式。(虽然调用语句是严格模式里,但这与foo
的this
如何决定无关。)