JS严格模式的this绑定问题
下面第三步的代码中,this为什么在严格模式下也绑定到了全局对象上?
如下:
1、首先我们不使用严格模式,以下代码的this默认绑定全局对象
function foo(){
console.log(this.a);
}
var a = 2;
foo();
//在谷歌浏览器中输出:2,
//在node中输出:undefined
2、然后我们在全局使用严格模式,以下代码会报错(TypeError)
"use strict";
function foo(){
console.log(this.a);
}
var a = 2;
foo();
//在谷歌浏览器和node中都报错:TypeError: Cannot read properties of undefined (reading 'a')
上面的代码中的报错原因是:使用严格模式导致this不会默认绑定到全局对象,所以TypeError
3、最后我们在函数中使用严格模式,如下:
function foo(){
console.log(this.a);
}
var a =2;
function foo2(){
"use strict";//严格模式
foo();//浏览器输出:2
//nodejs输出:undefined
}
foo2();
函数foo()中的代码又绑定了全局对象,为什么?