严格模式要求变量必须显式声明,未用let/const/var声明即赋值会抛出referenceerror;禁止删除不可配置属性、禁止八进制字面量、禁止with语句、函数参数名不能重复、禁止arguments.callee。

严格模式对作用域变量的使用提出了明确约束,核心是杜绝隐式行为、强制显式声明,从而让变量生命周期更清晰、避免污染全局作用域。
所有变量必须显式声明
在严格模式下,任何未用 let、const 或 var 声明就直接赋值的标识符都会抛出 ReferenceError:
-
"use strict"; x = 10;→ 报错(x 未声明) for(i = 0; i → 报错(i 未声明)- 推荐写法:
for(let i = 0; i (配合块级作用域更安全)
禁止意外创建全局变量
非严格模式中,漏写 var/let/const 会让变量自动挂到全局对象(如 window)上;严格模式彻底切断这一路径:
-
"use strict"; myName = "Alice";→ 报错,不会生成window.myName - 这能防止因拼写错误(如
userName写成useName)导致静默创建全局变量的问题
函数参数名必须唯一
重复参数名在严格模式下属于语法错误,避免运行时歧义:
-
function foo(a, a) { ... }→ 报SyntaxError - 这对解构参数同样适用:
function bar({x}, {x}) { ... }也会报错
eval 和 with 被限制,保护作用域边界
这两项操作会动态改变作用域链,严格模式对其做了收紧:
-
eval("let x = 42")→x不会泄露到外层作用域(eval 拥有独立词法环境) -
with(obj) { ... }→ 直接语法错误,因为其作用域解析不明确,影响优化和可读性 - 现代项目基本已弃用
with,而eval在生产环境也应避免
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











