Skip to content

严格模式

字面量表达式语句

javascript
"use strict";

声明严格模式

显式声明:

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

隐式声明(默认开启):

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

语法限制

开启严格模式后

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

执行限制

开启严格模式后

  • 对不存在的标识符赋值时,会导致引用错误(ReferenceError)
  • 运算符处理无法处理的操作数时,会导致类型异常(TypeError)或语法错误(SyntaxError)
  • 访问 arguments.callee 或 fn.callee,会导致类型异常(TypeError)
  • 对 arguments 的修改不起作用。
javascript
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

Released under the MIT License.