1.默认绑定首先要介绍的是最常用的函数调用类型:独立函数调用。可以把这条规则看作是无法应用其他规则时的默认规则:示例:function (){ console.log(this.a);}var
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模式。整个程序要么严格要么非严格。然而,有时候你可能会用到第三方库,其严格程度和你的代码有所不同。