染个代码 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 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口