javascript严格模式是什么_如何启用它【教程】

12次阅读

严格模式javaScript的限制性变体,通过”use strict”启用,使错误显式化、禁用危险语法、改变this和eval行为,提升代码可预测性与安全性。

javascript严格模式是什么_如何启用它【教程】

javascript 严格模式不是新语言,而是对 JavaScript 解析和执行的限制性变体——启用后会抛出更多错误、禁用危险语法、让代码行为更可预测。它不改变语法结构,但改变了 evalthis、变量声明、重复属性等的处理方式。

如何在脚本或函数中启用严格模式

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

  • 全局启用:
    "use strict";nconsole.log(this); // 全局中 this 为 undefined
  • 函数级启用:
    function foo() {n  "use strict";n  arguments[0] = 123; // 会报错:不能修改 arguments 值n}
  • 错误写法(被忽略):
    console.log("hello");n"use strict"; // 不生效

严格模式下哪些常见操作会报错

它把原本静默失败的行为变成显式错误,帮你提前发现隐患:

  • with 语句被完全禁止,使用即 SyntaxError
  • 给只读属性赋值(如 NaN = 1Object.defineProperty(obj, "x", {writable: false}) 后再改)抛出 TypeError
  • 删除不可配置属性(delete obj.x)抛出 TypeError,而非静默返回 false
  • 函数参数名重复(function f(a, a) {})在严格模式下是 SyntaxError
  • arguments.calleearguments.caller 被禁用,访问即 TypeError

严格模式对 thiseval 的影响

这是最容易踩坑的两个点,尤其在封装工具函数或处理回调时:

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

  • 非严格模式下,独立调用函数时 this 指向全局对象windowglobalThis);严格模式下为 undefined —— 这意味着 foo() 中的 this.x = 1 会直接报错,而不是意外污染全局
  • eval 在严格模式下不创建新变量到外层作用域:
    "use strict";neval("var x = 1");nconsole.log(x); // ReferenceError: x is not defined
  • 严格模式中,eval 内部声明的函数不会提升到外层,也不会泄漏变量名

严格模式不是“向后兼容补丁”,它的约束是硬性的。现代项目普遍默认启用(例如通过打包工具或 ES 模块自动开启),但手写脚本时仍需手动加 "use strict" 并注意位置。最常被忽略的是:模块(.mjstype="module")默认就是严格模式,此时再写 "use strict" 虽无害但冗余。

text=ZqhQzanResources