javascript严格模式是什么_如何启用它?

11次阅读

严格模式javaScript中更严格的执行规则,通过”use strict”启用,全局或函数级生效,ES模块默认启用,它使未声明赋值、重复参数等错误显式报错,提升代码健壮性。

javascript严格模式是什么_如何启用它?

javascript 严格模式不是新语法,而是一套更“较真”的执行规则——它让原本会静默失败或产生意外行为的代码,直接报错,帮你提前发现问题。

如何启用严格模式:两种方式,作用范围完全不同

启用只需一行字符串字面量 "use strict",但它必须出现在“可执行语句之前”,否则无效:

  • 全局启用:放在整个 js 文件或 标签的最顶部(前面只能有注释)
  • 函数级启用:放在某个函数体的第一行(不能在 iffor 等块内写)
  • ES 模块(含 import/export 的文件)默认就是严格模式,无需手动加
  • "use strict" 必须是双引号包裹的字符串字面量;单引号虽在部分环境能用,但不符合规范,不推荐
"use strict"; function foo() {   "use strict"; // ✅ 有效:函数级启用   bar = 42; // ❌ 报 ReferenceError } if (true) {   "use strict"; // ❌ 无效:不在函数体开头,也不在脚本顶层 }

为什么启用后代码突然报错?常见触发场景

很多旧代码在非严格模式下“凑合能跑”,一开严格模式就崩,往往是因为踩中了这几类限制:

  • name = "Alice":未声明就赋值 → ReferenceError(强制要求用 let/const/var
  • function test(a, a) { }:重复参数名 → SyntaxError
  • delete window.locationdelete myVar:删除变量/不可配置属性 → TypeError
  • with(obj) { ... }:使用 with 语句 → 直接语法错误
  • 独立调用函数时 thisundefined 而非 window,可能影响事件回调或 call/apply 逻辑

容易被忽略的关键细节

严格模式不是“开关式”功能,它的生效边界很具体,稍不注意就白加:

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

  • 箭头函数不支持单独启用严格模式,它继承外层作用域的严格状态
  • 模块中即使没写 "use strict",也默认启用——所以现代项目里你很可能已经在用了,只是没察觉
  • 不能靠条件判断动态开启:if (DEBUG) { "use strict"; } 完全无效
  • 旧项目迁移时,建议从新函数或新模块开始逐步启用,避免一次性爆大量 ReferenceError

真正要注意的,不是“要不要开”,而是理解哪些行为在严格模式下会被拦截——因为这些拦截点,往往就是你代码里最脆弱、最容易被忽略的角落。

text=ZqhQzanResources