严格模式下全局作用域和普通函数调用中的 this 均为 undefined;箭头函数继承外层 this,类方法默认严格模式且 this 取决于调用方式;需访问全局对象时应使用 globalthis 等显式方式。

在严格模式("use strict")下,全局作用域中的 this 不再指向全局对象(如浏览器中的 window 或 Node.js 中的 global),而是变为 undefined。这是严格模式对 this 绑定最直接、最关键的改变之一。
严格模式下全局 this 是 undefined
非严格模式中,在函数外部或全局作用域直接写 this,它默认绑定到全局对象:
console.log(this === window); // true(浏览器中)
但加上 "use strict" 后:
"use strict"; console.log(this); // undefined
这个变化适用于所有未显式绑定 this 的全局执行上下文,包括模块顶层代码(ESM 默认严格模式,所以其顶层 this 也是 undefined)。
立即学习“Java免费学习笔记(深入)”;
普通函数调用时 this 不再自动绑定全局对象
非严格模式下,独立调用函数(如 foo())时,函数内部的 this 会默认指向全局对象:
function foo() {
return this;
}
foo() === window; // true
严格模式下则不同:
"use strict";
function foo() {
return this;
}
foo(); // undefined
这种行为能更早暴露 this 使用错误,避免意外污染全局对象。
箭头函数和 class 方法不受此影响(但逻辑一致)
箭头函数没有自己的 this,它继承外层作用域的 this 值,因此是否启用严格模式不影响其查找规则——但外层如果是全局严格上下文,外层 this 就是 undefined,箭头函数自然也得到 undefined。
类的方法默认以严格模式运行,且方法内部的 this 取决于调用方式(如是否被正确绑定),不是自动 fallback 到全局对象。这也与严格模式的设计目标一致:让 this 更明确、更可控。
如何安全访问全局对象(如需)
如果确实需要引用全局对象(例如动态挂载变量、检测环境),不要依赖 this,而应显式获取:
- 浏览器中可用
globalThis(现代标准,兼容性好) - Node.js 中可用
global - 旧浏览器可回退到
self或window,但需判断存在性
例如:
"use strict"; const globalObj = globalThis; // 推荐,统一跨平台
不推荐:this 在全局或简单函数中“碰运气”获取全局对象,容易在严格模式下出错。










