严格模式
严格模式如何开启?
"use strict"; // 整个脚本开启
function doSomething() {
"use strict"; // 只在函数内开启
}
- 位置: 指令必须是脚本或函数体的第一条语句;
- 粒度: 可以按脚本或按函数开启, 未开启的代码保持宽松模式;
严格模式改变了哪些行为?
- 声明要求: 禁止未声明就赋值等不稳定行为, 直接抛出错误;
with: 禁止使用with语句, 详见 跳转语句与 with;this: 全局执行上下文与未绑定调用的普通函数中,this为undefined而不是全局对象, 详见 this 绑定;- 尾调用: 只有严格模式下引擎才可能做尾调用优化, 详见 递归与尾调用;
为什么推荐按函数开启而不是全局开启?
- 兼容: 全局开启会影响同文件内所有脚本与拼接进来的第三方代码;
- 定位: 按函数开启让影响范围可控, 便于逐段迁移历史代码;