this为什么在严格模式下也绑定到了全局对象上?

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()中的代码又绑定了全局对象,为什么?

已找到答案,之前有个大佬好像删了自己的回答,所以本帖暂不采纳任何答案,关于答案的出处,官网说得很清楚:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

因为不是全局的

看看变量的提升,你严格模式在里边,谁都没影响到,所以没事

截图一存在变量声明提前,截图二在严格模式下没有变量声明提前,this没变都是window,但是因为截图二严格模式,在函数执行的时候没有找到变量a,所以报错