染个代码 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日

悬赏问题

  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?