JavaScript中this指向取决于调用方式:全局上下文和普通函数调用时指向全局对象(浏览器为window,Node为global),但ES6模块和严格模式下为undefined;箭头函数无this,继承外层作用域。

在 JavaScript 中,this 的指向取决于函数的调用方式。在全局执行上下文和普通函数调用中,this 指向全局对象,但严格模式下例外。
全局执行上下文中 this 的指向
脚本最外层(不在任何函数内)的代码属于全局执行上下文。此时 this 直接引用全局对象:
- 浏览器环境:指向 window
- Node.js 环境:指向 global
- ES6 模块(.mjs 或 import/export)中,顶层 this 是 undefined(模块作用域是严格模式)
普通函数调用中 this 指向全局对象
当函数以“简单调用”形式执行(即不通过对象属性、new、call/apply/bind 调用),且不在严格模式下时,this 会绑定到全局对象:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如:
function foo() { console.log(this); } foo();→ 浏览器中输出 window - 这种行为是历史遗留问题,设计初衷是让未明确绑定的函数默认操作全局环境
- 注意:箭头函数没有自己的 this,它继承外层作用域的 this,因此不受此规则影响
严格模式下 this 不再指向全局对象
启用严格模式后,普通函数调用中的 this 值为 undefined,避免意外修改全局对象:
立即学习“Java免费学习笔记(深入)”;
- 在函数开头加
"use strict";,或整个脚本启用严格模式 -
"use strict"; function bar() { console.log(this); } bar();→ 输出 undefined - 这是更安全、更可预测的行为,现代开发推荐始终使用严格模式
如何验证 this 的实际值
可在控制台或代码中直接打印并比对:
console.log(this === window); // 浏览器非严格模式下为 trueconsole.log(this === globalThis); // 推荐用 globalThis 统一获取全局对象console.log(this); // 观察输出对象的属性(如 window.location、global.process)来判断环境

















