位置:首页 > JavaScript > JavaScript严格模式下全局调用函数this为何是undefined

JavaScript严格模式下全局调用函数this为何是undefined

时间:2026-08-12  |  作者:游戏探长  |  阅读:0

严格模式下全局调用函数时,this 为 undefined,这是语言设计上主动切断默认绑定的结果,目的是防止全局污染。而在非严格模式下,出于历史原因,this 默认指向 window/global,更容易意外修改全局属性。

Ja vaScript 中怎么理解严格模式下全局调用函数时 this 为 undefined

严格模式下全局调用函数时 thisundefined,不是“变出来的”。本质上,这是语言设计上主动切断默认绑定、防止误操作的结果。

它不改变函数本身,只改变调用时的执行上下文规则。

为什么非严格模式下 this 指向全局对象?

在早期 Ja vaScript 的设计里,像 foo() 这样的独立调用,因为没有明确挂在哪个对象上,this 就会默认指向全局对象。在浏览器环境中,这个全局对象就是 window

这种处理方式看起来省事,但问题也很明显:如果不小心使用了 this,就可能顺手污染全局属性。

  • this.name = "test" 实际改了 window.name
  • console.log(this) 看起来像在“当前环境”,但其实隐式绑定了全局

严格模式如何让 this 变成 undefined?

只要函数体运行在严格模式下,并且调用时走的是「默认绑定」这条路径,那么最终拿到的 this 就会是 undefined

这里的「默认绑定」指的是:没有通过对象、call/apply/bind、构造函数,或者箭头函数这类方式显式或间接指定 this

常见的触发方式主要有三种:

  • 函数内部第一行写 "use strict";
  • 整个脚本顶部加 "use strict";
  • 使用 ES6 模块(.mjs 文件或