this 的第一个绑定规则是默认绑定, 即指向全局对象. 在无法应用其它三个规则时, 就会默认使用这个规则.
如果不带任何修饰的函数引用进行调用, 函数内的this就会采用默认绑定.
function foo(){
console.log(this.a);
}
function bar(){
var a = 3;
foo()
}
var a = 2;
bar(); // 输出2
如果使用了严格模式, 则不能将全局对象用于默认绑定, this 会绑定到 undefined.
function foo(){
"use strict"
console.log(this.a);
}
function bar(){
var a = 3;
foo()
}
var a = 2;
bar(); // TypeError: Cannot read properties of undefined (reading 'a')
值得注意的是: 严格模式应当放在函数运行的位置, 如果是在函数调用处声明严格模式, 则不会影响默认绑定:
function foo(){
console.log(this.a);
}
function bar(){
"use strict"
var a = 3;
foo()
}
var a = 2;
bar(); // 输出2, 仍然能应用默认绑定到全局对象.









网友评论