严格模式限制全局作用域的隐式操作:禁止隐式创建全局变量、全局函数中this为undefined、禁止delete声明的全局成员、保留字不可用作全局标识符。

严格模式对全局作用域的使用做了明确限制,核心是防止意外污染全局环境、提升代码可预测性。它不改变作用域本身的结构(仍是全局+函数+块级),但大幅收紧了在全局作用域中“隐式操作”的自由度。
禁止隐式创建全局变量
非严格模式下,直接给未声明的标识符赋值(如 name = "Alice")会自动挂到全局对象(如 window.name)上。严格模式下这会立即抛出 ReferenceError。
- 必须显式声明:var name = "Alice"、let name = "Alice" 或 const name = "Alice"
- 即使在全局作用域顶部,漏写声明关键字也会报错,不会静默失败
全局函数中 this 指向 undefined
在严格模式的全局作用域中,普通函数调用时的 this 不再默认绑定到全局对象,而是保持为 undefined。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如:function foo() { console.log(this); } 在严格模式下调用 foo(),输出是 undefined
- 这一变化让 this 的行为更统一,避免因调用方式不同导致意外指向全局对象
禁止删除全局声明的变量和函数
严格模式下,对通过 var、let、const 或 function 声明的全局成员使用 delete 操作符会直接报错。
立即学习“Java免费学习笔记(深入)”;
- var count = 10; → delete count; 抛出 TypeError
- 这与非严格模式中“静默失败”(返回 false)形成对比,强制开发者正视变量生命周期
保留字限制影响全局命名
严格模式禁止将部分保留字用作全局变量名或函数名,包括 implements、interface、let、package、private、protected、public、static 和 yield。
- 例如:var public = "data"; 在严格模式下会触发 SyntaxError
- 这是为未来语言演进预留空间,也避免与潜在语法冲突

















