严格模式通过强制显式声明变量来杜绝隐式全局变量,未声明赋值(如x=10)或拼错变量名均抛出ReferenceError;所有变量必须用let/const/var显式声明后使用。

严格模式通过强制显式声明变量,直接堵住隐式全局变量的产生路径。它不靠提示或警告,而是让未声明就赋值的行为立刻报错,把潜在隐患拦在运行前。
未声明赋值会立即报错
在非严格模式下,x = 10 这样的写法会悄悄把 x 挂到全局对象(如 window.x)上;而启用 "use strict" 后,这行代码直接抛出 ReferenceError: x is not defined,函数内拼错变量名(比如把 userName 写成 userNmae)也会同样报错,不会意外创建新全局变量。
必须用 let / const / var 显式声明
所有变量都得先声明再使用,没有例外:
- let 和 const 是首选——块级作用域、不提升,配合严格模式能彻底避免作用域混乱
- var 仍可用,但要注意其函数作用域和变量提升特性,容易引发误解
- 循环中漏声明 i(如 for(i = 0; i )也会报错,逼你写成 for(let i = 0; ...)
作用域内一律生效,不放过任何角落
严格模式不是“全局开关”就完事,它对每个作用域都起效:
立即学习“Java免费学习笔记(深入)”;
- 写在脚本顶部:"use strict" 让整个文件进入严格模式
- 写在函数内部:"use strict" 只约束该函数,不影响外部或其他函数
- 嵌套函数、回调、定时器里的代码,只要所在作用域启用了严格模式,未声明赋值就会中断执行
和其他机制协同防漏
严格模式本身不规定用哪种声明方式,但它天然适配现代 JS 的安全习惯:
- ES6 模块默认就是严格模式,无需手动加 "use strict"
- 搭配 let/const 使用,可避免 var 带来的变量提升和重复声明问题
- 结合 ESLint 等工具,还能进一步检查未使用变量、重复定义等边界情况


















