严格模式要求所有变量必须显式声明后才能使用,禁止隐式全局变量、重复声明及使用保留字,删除变量或修改只读属性会报错而非静默失败。

在严格模式下,变量使用必须遵循明确的声明规则,否则会直接报错,而不是静默创建全局变量或忽略错误。核心原则就一条:所有变量必须显式声明后才能使用。
变量必须先声明再使用
非严格模式中,给未声明的标识符赋值会自动挂到全局对象(如 window)上;严格模式禁止这种行为,会抛出 ReferenceError。
-
错误写法:
"use strict"; count = 10;→ 报错:“count is not defined” -
正确写法:
"use strict"; let count = 10;或const count = 10;或var count = 10;
禁用隐式全局变量
这是严格模式最实用的安全保障。它强制开发者意识到变量作用域,避免污染全局命名空间。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 比如在函数内写
name = "Alice",非严格模式会悄悄创建 window.name;严格模式下直接中断执行 - 尤其适合多人协作项目,能提前暴露漏声明的变量,减少低级 bug
禁止重复声明与保留字限制
严格模式还强化了语法检查,防止语义冲突。
- 不允许函数参数重名:
function fn(a, a) { }→ SyntaxError - 不能用未来保留字作变量名,例如:
let interface = "api";→ 报错(interface 是保留字) -
let和const声明的变量不可重复声明,即使在不同块级作用域中也需注意命名唯一性
删除变量和只读属性更严格
虽然不常操作,但一旦涉及底层对象控制,严格模式让行为更可预测。
-
let x = 5; delete x;→ TypeError(非严格模式中静默失败) - 对
Object.defineProperty设置的writable: false属性重新赋值,也会立即报 TypeError - 这有助于调试对象冻结、不可变状态等场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










