严格模式下普通函数独立调用时this为undefined,禁用默认绑定到全局对象;this由调用位置决定,非定义位置;箭头函数无this,继承外层作用域this,不受严格模式影响。

因为在严格模式下,JavaScript 明确规定:非绑定、非对象上下文调用的普通函数,其 this 不再被自动绑定到全局对象(如 window 或 globalThis),而是保持为 undefined。
严格模式禁用了 this 的默认绑定
非严格模式下,独立调用函数(如 foo())时,引擎会把 this 强制设为全局对象——这是一种隐式、易出错的“兜底”行为。严格模式移除了这个兜底逻辑,让 this 的值更真实地反映调用方式。
普通函数的 this 取决于调用位置,而非定义位置
this 是运行时绑定的,和函数怎么写无关,只看它怎么被调用。在严格模式下:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
foo()→this是undefined -
obj.foo()→this是obj -
foo.call(null)或foo.apply(undefined)→this是null或undefined(不被转换) -
new foo()→this是新创建的实例(严格/非严格模式一致)
对比非严格模式,更能暴露错误
比如误写 getName() 而本意是 user.getName(),非严格模式下可能静默读取 window.getName,而严格模式直接报错 Cannot read property 'xxx' of undefined,促使你立刻发现调用上下文缺失。
箭头函数不受影响,因为它没有自己的 this
箭头函数的 this 始终继承外层普通函数作用域的 this 值,与是否严格模式无关。它本身不参与 this 绑定规则,所以不会变成 undefined——但它的“源头”如果是严格模式下的普通函数且未正确绑定,那继承来的也可能是 undefined。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










