logologo
  • WebUI
  • JavaScript
  • TypeScript
  • C++
  • ··
    • C
    • Rust
    • Python
    • Cangjie
    • SQL
    • Design
    概述
    常见的数据结构
    ecmascript相关
    enumerable
    Object 内部实现
    sameValue 算法
    unicode
    语法设计
    声明
    表达式
    模块
    语句
    严格模式
    类型系统
    Array
    typedArray
    Map
    Number
    Object
    Set
    String
    结构化
    基本的组织元素
    动态性
    并发性
    范式
    函数式
    函数的行为
    闭包
    函数
    从运算式语言到函数式语言
    语言的多范式

    Last Updated: 11/30/2025, 3:14:53 PM

    Previous page语句Next page类型系统

    #严格模式

    字面量表达式语句

    "use strict";

    #声明严格模式

    显式声明:

    • 全局代码的开始处加入
    • 在 eval 代码开始处加入
    • 在函数声明代码开始处加入
    • 在 new Function()所传入的 body 参数块开始处加入

    隐式声明(默认开启):

    • 模块中
    • 类声明和类表达式的整个声明块中
    • 在引擎和宿主的运行参数中指定,比如"node --use_strict"

    #语法限制

    开启严格模式后

    分类说明示例
    对象字面量声明不许对象字面量声明中存在相同的属性名
    函数声明不许出现相同的参数名
    赋值运算eval 和 arguments 标识符不能声明或重写
    delete不许 delete 掉 eval、arguments 和所有显式声明的变量
    标识符声明的标识符不能使用关键字和保留字
    with不能使用 with

    #执行限制

    开启严格模式后

    • 对不存在的标识符赋值时,会导致引用错误(ReferenceError)
    • 运算符处理无法处理的操作数时,会导致类型异常(TypeError)或语法错误(SyntaxError)
    • 访问 arguments.callee 或 fn.callee,会导致类型异常(TypeError)
    • 对 arguments 的修改不起作用。
    function f1(x) {
      "use strict";
      arguments[0] = 100;
      return x;
    }
    function f2(x) {
      arguments[0] = 100;
      return x;
    }
    f1("a"); // 严格模式下返回'a'
    f2("a"); // 非严格模式返回 100`

    #严格模式的范围

    TODO