跳到主要内容

严格模式

严格模式如何开启?​

"use strict"; // 整个脚本开启

function doSomething() {
"use strict"; // 只在函数内开启
}
  • 位置: 指令必须是脚本或函数体的第一条语句;
  • 粒度: 可以按脚本或按函数开启, 未开启的代码保持宽松模式;

严格模式改变了哪些行为?​

  • 声明要求: 禁止未声明就赋值等不稳定行为, 直接抛出错误;
  • with: 禁止使用 with 语句, 详见 跳转语句与 with;
  • this: 全局执行上下文与未绑定调用的普通函数中, this 为 undefined 而不是全局对象, 详见 this 绑定;
  • 尾调用: 只有严格模式下引擎才可能做尾调用优化, 详见 递归与尾调用;

为什么推荐按函数开启而不是全局开启?​

  • 兼容: 全局开启会影响同文件内所有脚本与拼接进来的第三方代码;
  • 定位: 按函数开启让影响范围可控, 便于逐段迁移历史代码;