严格模式是ES5引入的更严谨JavaScript执行环境,通过"use strict"启用,强制变量声明、禁用八进制字面量、使this为undefined、禁用with和arguments.callee等,提升错误可见性、减少全局污染、增强引擎优化与安全性。
JavaScript 的严格模式是一种更严谨的代码执行环境,从 ES5 开始引入,通过在脚本或函数顶部添加
指令启用。它不是语法糖,而是主动改变 JavaScript 的运行规则,让错误更早暴露、行为更可预测。
严格模式的主要限制
这些限制不是为了刁难开发者,而是为了堵住常见隐患:
变量必须先声明再使用
:直接写
会报
,必须用
或
(
也行,但不推荐)。
禁止删除变量、函数或参数
:比如
或
会抛出
。
对象属性和函数参数不能重复
:
或
直接语法报错。
禁用八进制字面量
:像
这种以
开头的数字不再被识别为八进制,会报错(应改用
)。
不再默认绑定到全局对象
:普通函数中
是
,而不是
浏览器
里的
,避免意外污染全局。
禁用语句和
:
容易引发
作用域
混乱,
影响优化,两者在严格模式下直接不可用。
保留字不能用作变量名
:比如
、
、
、
等未来可能成为关键字的词,现在就禁止赋值使用。
严格模式带来的实际好处
看似多了约束,实则省去大量调试时间,提升长期协作质量:
静默错误变显式报错
:比如给只读属性赋值、对
赋值、重复声明变量等,在非严格模式下可能“没反应”,严格模式立刻抛异常。
减少意外的全局变量
:未声明变量直接赋值是 JS 最常见的 bug 来源之一,严格模式强制声明,从源头掐断。
提升引擎优化能力
:因为行为更确定(比如
不再动态绑定、
和参数不再自动同步),JS 引擎可以更激进地编译和内联。
增强安全性
:
在严格模式下有独立作用域,它内部声明的变量不会泄露到外部;同时禁止
修改作用域链。
为现代语法铺路
:提前禁用潜在保留字,让代码更容易兼容 ES6+ 新特性,比如
、
、
等在严格模式下已不能当变量名。
怎么开启严格模式
两种方式,效果略有不同:
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
立即学习
“
Java免费学习笔记(深入)
”;
整个脚本启用
:在 .
js
文件第一行写
(注意是字符串字面量,不是注释)。
单个函数启用
:在函数体第一行写
,只对该函数生效,不影响外部。
注意:
必须出现在脚本或函数的最开头,前面不能有任何可执行语句,否则会被忽略。
基本上就这些。它不复杂,但容易忽略——尤其在老项目迁移或多人协作时,加一行就能避开一大半低级陷阱。
"use strict"x = 10ReferenceErrorlet x = 10const x = 10vardelete myVardelete myFuncTypeError{a: 1, a: 2}function(a, a) {}01000o10thisthisundefinedwindowwitharguments.calleewitharguments.calleeletstaticprivateyieldNaNthisargumentsevalevalclassimportsuper"use strict";"use strict";"use strict"