严格模式下普通函数直接调用时this指向undefined,旨在避免污染全局作用域、提升调试与静态分析能力;需显式处理上下文,箭头函数不受影响,模块默认启用严格模式。

在严格模式下,普通函数直接调用时,this 指向 undefined,而不是全局对象(如 window 或 global)。这是 JavaScript 有意为之的设计——避免意外污染全局作用域,也更利于调试和静态分析。
为什么是 undefined?
非严格模式下,独立调用函数(比如 foo())会把 this 自动绑定到全局对象,容易引发隐蔽 bug(例如误改 window.x)。严格模式禁用了这种“兜底行为”,让 this 保持为原始值 undefined,强制开发者显式处理上下文。
如何确认当前处于严格模式?
- 整个脚本开头加
"use strict"; - 或函数体第一行写
"use strict";(只对该函数生效) - 模块(.mjs 文件或 ES 模块)默认启用严格模式,无需手动声明
常见表现和注意事项
- 直接调用函数时访问
this.xxx会报错:TypeError: Cannot read property 'xxx' of undefined -
console.log(this)输出undefined(浏览器控制台中可能显示为undefined或空对象图标,但实际值就是undefined) - 箭头函数不受此影响——它不绑定
this,而是继承外层作用域的this值(哪怕外层是严格模式下的undefined) - 如果需要在严格模式下复用全局环境,应显式传参或使用
globalThis(现代标准,兼容浏览器与 Node.js)
对比示例
非严格模式:
function test() { return this; }
test(); // 返回 window(浏览器)或 global(Node)
严格模式:
立即学习“Java免费学习笔记(深入)”;
"use strict";
function test() { return this; }
test(); // 返回 undefined
不复杂但容易忽略


















