JavaScript中的严格模式(Strict Mode)
字数 641 2025-11-06 12:41:20

JavaScript中的严格模式(Strict Mode)

描述
严格模式是ES5引入的一种JavaScript运行模式,它通过抛出更多错误和禁用部分不安全语法,使代码更安全、更符合现代规范。启用严格模式后,引擎会优化代码执行,避免常见的编码错误。

为什么要用严格模式?

  1. 消除隐式错误:例如未声明的变量赋值会报错(非严格模式下会创建全局变量)。
  2. 禁止某些语法:如with语句、重复的函数参数等。
  3. 提升性能:限制evalarguments的副作用,便于引擎优化。

启用严格模式的方法

  1. 全局启用:在脚本文件或<script>标签的顶部添加"use strict";
    "use strict";
    x = 10; // 报错:x未声明
    
  2. 函数内启用:在函数体顶部添加"use strict";(仅对该函数生效)。
    function strictFunc() {
      "use strict";
      y = 20; // 报错
    }
    

严格模式的主要变化

  1. 变量必须声明

    "use strict";
    x = 1; // ReferenceError: x is not defined
    

    非严格模式下会隐式创建全局变量

  2. 禁止删除不可删除的属性

    delete Object.prototype; // TypeError: Cannot delete property 'prototype'
    
  3. 函数参数不能重名

    function dup(a, a) { "use strict"; } // SyntaxError: Duplicate parameter name
    
  4. 禁止使用with语句

    "use strict";
    with (obj) { } // SyntaxError: Strict mode code may not include a with statement
    
  5. this默认值为undefined(非严格模式下为全局对象)

    function showThis() {
      "use strict";
      console.log(this); // undefined
    }
    showThis();
    
  6. 禁止八进制字面量

    "use strict";
    let n = 010; // SyntaxError: Octal literals are not allowed
    
  7. eval不再泄露变量到外部作用域

    "use strict";
    eval("var z = 1;");
    console.log(z); // ReferenceError: z is not defined
    
  8. 禁止对只读属性(如arguments.caller)赋值

    "use strict";
    arguments.caller = "test"; // TypeError
    

严格模式的注意事项

  • 如果代码依赖非严格模式特性(如全局变量自动创建),启用严格模式可能导致错误。
  • 合并脚本时,若部分代码启用严格模式,需注意作用域隔离(避免非严格代码被影响)。

实际应用建议

  • 新项目建议全局启用严格模式,避免潜在错误。
  • 旧项目迁移时,可先针对单个函数启用,逐步修复问题。
JavaScript中的严格模式(Strict Mode) 描述 严格模式是ES5引入的一种JavaScript运行模式,它通过抛出更多错误和禁用部分不安全语法,使代码更安全、更符合现代规范。启用严格模式后,引擎会优化代码执行,避免常见的编码错误。 为什么要用严格模式? 消除隐式错误:例如未声明的变量赋值会报错(非严格模式下会创建全局变量)。 禁止某些语法:如 with 语句、重复的函数参数等。 提升性能:限制 eval 和 arguments 的副作用,便于引擎优化。 启用严格模式的方法 全局启用 :在脚本文件或 <script> 标签的顶部添加 "use strict"; 。 函数内启用 :在函数体顶部添加 "use strict"; (仅对该函数生效)。 严格模式的主要变化 变量必须声明 非严格模式下会隐式创建全局变量 。 禁止删除不可删除的属性 函数参数不能重名 禁止使用 with 语句 this 默认值为 undefined (非严格模式下为全局对象) 禁止八进制字面量 eval 不再泄露变量到外部作用域 禁止对只读属性(如 arguments.caller )赋值 严格模式的注意事项 如果代码依赖非严格模式特性(如全局变量自动创建),启用严格模式可能导致错误。 合并脚本时,若部分代码启用严格模式,需注意作用域隔离(避免非严格代码被影响)。 实际应用建议 新项目建议全局启用严格模式,避免潜在错误。 旧项目迁移时,可先针对单个函数启用,逐步修复问题。