javascript中的严格模式是什么_为什么要使用它以及如何开启【教程】

3次阅读

严格模式是 JavaScript 中限制性更强的执行上下文,通过 ”use strict” 启用,禁止隐式全局变量、重复参数名等不安全操作,并使错误显式抛出。

javascript 中的严格模式是什么_为什么要使用它以及如何开启【教程】

严格模式是什么:一段被“加锁”的 JavaScript 代码

严格模式(Strict Mode)是 JavaScript 中一种限制性更强的执行上下文,它让引擎在解析和运行代码时启用更严格的错误检查与行为约束。它不是新语言,而是对现有语法施加额外规则——比如禁止隐式全局变量、静默失败的赋值、重复参数名等。一旦触发,不符合规范的代码会直接抛出 TypeErrorSyntaxError,而不是悄悄忽略或降级处理。

为什么 用严格模式:避免那些“看似能跑,其实埋雷”的写法

很多 JS 坏习惯在非严格模式下不会报错,但会导致难以追踪的 bug:

  • with 语句被完全禁用——它破坏 作用域 链,影响性能且难以优化
  • 给只读属性赋值(如 NaN = 1)不再静默失败,而是抛出 TypeError
  • 函数参数名重复(function foo(a, a) {})在严格模式下是语法错误
  • this 在非对象调用时不再指向 window浏览器)或 global(Node),而是 undefined,避免意外污染全局
  • 删除不可配置属性(如 delete Object.prototype.toString)会立即报错,而非返回 false

如何开启严格模式:两种方式,效果不同

严格模式必须通过字面量字符串 "use strict" 显式声明,且只能出现在脚本顶部或函数体开头(不能在条件分支或循环内)。注意:它不支持表达式写法,也不能用变量拼接。

两种开启方式的 区别 很关键:

立即学习Java 免费学习笔记(深入)”;

  • 脚本级严格模式:整个 JS 文件生效,需放在文件第一行(前面不能有任何语句,包括注释)
  • 函数级严格模式:只对当前函数及其内部嵌套函数生效,不影响外部作用域
"use strict"; function foo() {   "use strict"; // 这里再写一次也合法,但冗余   eval("var x = 1"); // 在严格模式中,eval 不会泄漏变量到外层   return x; // ReferenceError: x is not defined }

严格模式的兼容性与实际建议

所有现代浏览器和 Node.js 都支持严格模式,但 IE9+ 才开始部分支持,IE8 及更早版本完全忽略该指令(即降级为非严格模式)。所以如果你仍需兼容 IE8,不能依赖严格模式来捕获某些错误。

真正要注意的是:模块(.mjs 文件或 import/export 语法)默认就是严格模式,无需手动声明;而 CommonJS 模块(require)则不自动启用。

建议始终在新项目中启用——不是靠它“修复”代码,而是让它帮你提前暴露松散写法带来的隐患。最稳妥的做法是:每个函数都显式加 "use strict",或者统一在模块顶层声明(尤其使用构建 工具 时,确保打包后仍保留该指令位置)。

text=ZqhQzanResources