1.默认绑定 首先要介绍的是最常用的函数调用类型:独立函数调用。可以把这条规则看作是无法应用其他规则时的默认规则: 示例:
function (){
console.log(this.a);
}
var a = 2;
foo(); //2
从上可以看到当调用foo()时,this.a 被解析成了全局变量a,通过分析this的调用位置可以得到this指向全局对象。 如果使用严格模式(strict mode),则不能将全局对象用于默认绑定,因此this会绑定到undefined:
function foo(){
"use strict";
console.log(this.a);
}
var a = 2;
foo();//TypeError:this is undefined
这里有一个微妙但是非常重要的细节,虽然this 的绑定完全取决于调用位置,但是只有foo()运行在非strict mode 下时,默认绑定才能绑定到全局对象;在严格模式下调用foo()则不影响默认绑定:
function foo(){
console.log(this.a);
}
var a = 2;
(function(){
"use strict";
foo(); //2
})();
注意:通常来说你不应该在代码中混合使用strict 模式 和 非strict模式。整个程序要么严格要么非严格。然而,有时候你可能会用到第三方库,其严格程度和你的代码有所不同。