信息发布→ 登录 注册 退出

什么是javascript严格模式_它如何帮助你写出更安全的代码

发布时间:2026-01-11

点击量:
严格模式是一组更严格的解析和执行规则,启用后使危险代码直接报错以暴露潜在问题;需用"use strict"字面量在脚本顶部或函数首行声明,禁用静默失败、with语句、重复参数等,并使非函数上下文中this为undefined。

JavaScript 严格模式不是语法糖,也不是新语言,而是一组更严格的解析和执行规则——启用后,原本“能跑但危险”的代码会直接报错,逼你暴露并修复潜在问题。

如何启用严格模式

严格模式必须通过字面量字符串 "use strict" 声明,且必须出现在脚本顶部或函数体第一行(否则无效)。

"use strict";
function foo() {
  "use strict"; // 函数级严格模式
  // ...
}
  • 全局启用:整个脚本文件第一行是 "use strict",所有代码受约束
  • 函数级启用:只对当前函数及其嵌套作用域生效,不影响外部
  • 不能用条件语句包裹:if (true) { "use strict"; } 完全无效
  • 模块(.mjsimport 加载的脚本)默认启用严格模式,无需手动声明

严格模式禁止的常见危险操作

它不新增功能,而是封掉容易引发 bug 的旧习,比如静默失败、意外全局变量、模糊的 this 绑定。

  • 给未声明变量赋值会报 ReferenceError(而不是自动挂到 window 上)
  • with 语句被完全禁用——它破坏作用域链,让静态分析失效
  • 函数参数名重复(如 function f(a, a) {})触发 SyntaxError
  • 八进制字面量(如 010)被禁止,避免歧义;必须写成 0o10
  • delete 不能用于变量、函数、参数,只能删对象自有属性(否则报 TypeError
  • 在非函数上下文中,this 不再指向全局对象,而是 undefined(防止意外修改全局)

严格模式下 this 行为的变化

这是最容易踩坑的一点:非严格模式中,独立调用函数时 this 指向全局对象(windowglobalThis),而严格模式下是 undefined

"use strict";
function foo() {
  console.log(this); // undefined
}
foo(); // 而不是 window
  • 箭头函数不受影响(它本就不绑定 this
  • 类方法、对象方法、call/apply/bind 显式传入的 this 仍正常工作
  • 这个变化让 this 绑定更可预测,也更容易发现忘记绑定的事件处理器或回调

严格模式不是万能的,但它能暴露真问题

它不会阻止逻辑错误,也不会帮你防 XSS 或类型错误,但它强制你面对 JavaScript 中那些“靠运气运行”的灰色地带。比如,你写 delete obj.x 却没检查 obj 是否存在,在非严格模式下可能静默失败;而在严格模式下,如果 objundefined,会立刻抛出 TypeError,让你知道该加空值检查了。

真正容易被忽略的是:严格模式只对**当前作用域**有效,且无法“继承”——子函数不会自动严格,除非自己也写了 "use strict"。混用严格与非严格代码时,边界处的行为差异尤其需要留心。

标签:# javascript  # java  # js  # 处理器  # app  # win  # 作用域  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!