染个代码 2022-11-08 17:38 采纳率: 75%
浏览 60
已结题

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

  • 写回答

5条回答 默认 最新

  • 染个代码 2022-11-13 20:03
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 11月8日

悬赏问题

  • ¥30 关于#python#的问题:我想要的是这79个大特征对于房屋售价的最大的影响前十名(相关搜索:随机森林)
  • ¥15 使用matlab计算自定义特殊函数的二重积分,改变积分顺序所得的结果不同的问题?
  • ¥15 mysql做碎片化处理老是报错怎么办
  • ¥15 如何正确在vs2010中初始化map对象
  • ¥30 mmdet3d模型部署问题
  • ¥15 comsol仿真反射率、吸收率时峰值位置和深度不对!
  • ¥30 Visual Studio找不到sdk,如何解决?
  • ¥15 labview与机器之间网口通信发送指令
  • ¥15 迪杰斯特拉算法,考虑时延,带宽
  • ¥30 C#提交json字符串给http服务器