什么是javascript中的严格模式_怎样启用并避免常见错误【教程】

7次阅读

严格模式是一套更严谨的语法和错误检查规则,启用后使静默失败操作抛出错误、禁止不安全写法,并需用”use strict”字面量在脚本顶部或函数首行声明,否则无效。

什么是javascript中的严格模式_怎样启用并避免常见错误【教程】

javaScript 严格模式不是可选的“增强功能”,而是一套更严谨的语法和错误检查规则——启用后,原本静默失败的操作会抛出错误,不安全的写法会被禁止。它不能解决所有 bug,但能帮你早发现 undefined 变量、重复参数、静默赋值失败等典型隐患。

怎样在脚本或函数中启用严格模式

严格模式必须通过字面量字符串 "use strict" 声明,且必须出现在脚本顶部(全局作用域)或函数体第一行(函数作用域)。任何前置语句(包括注释、空行、console.log)都会导致声明失效。

常见错误写法:

  • "use strict" 写在函数中间或条件块里 → 不生效
  • 用单引号以外的字符串(如模板字面量 `use strict`)→ 不识别
  • 在模块(.mjsimport 场景)中误以为自动启用 → 实际仍需显式声明

正确示例:

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

function foo() {   "use strict";   x = 1; // ReferenceError: x is not defined }

严格模式下哪些操作会直接报错

它把很多“容忍型”行为变成明确错误,核心是阻止歧义和潜在危险操作:

  • 给未声明变量赋值:x = 1ReferenceError
  • 删除不可配置属性:delete Object.prototypeTypeError
  • 使用八进制字面量:010SyntaxError(注意:ES2015+ 八进制应写为 0o10
  • 对象字面量含重复属性名:{a: 1, a: 2}SyntaxError
  • 函数形参重名:function f(a, a) {}SyntaxError

这些不是“性能优化”,而是强制暴露代码逻辑缺陷。

严格模式对 thisarguments 的影响

非严格模式下,全局函数中 this 指向 window浏览器)或 globalnode.js),容易掩盖 this 绑定错误;严格模式下,该场景中 thisundefined,迫使你明确处理上下文。

同样,arguments 在严格模式下不再与形参同步更新,且无法用 arguments.calleearguments.caller —— 这些都是被废弃的动态调用方式,禁用后更利于引擎优化和静态分析。

示例对比:

function f() { return this; } f(); // 非严格:window;严格:undefined

严格模式真正的难点不在启用,而在它暴露的是你长期忽略的隐式依赖——比如靠全局泄漏变量、靠 this 默认绑定、靠 arguments 动态访问。一旦启用,别只盯着报错行,要顺藤摸瓜检查变量作用域、函数调用方式和对象定义规范。

text=ZqhQzanResources