进入标志
'use strict'
老版本会当做一串普通字符
如何调用
- 写在首行,整个文件进入严格模式
- 放在函数体第一行
- 将整个脚本文件放在一个立即执行的匿名函数之中
(function (){
"use strict";
// some code here
})();
strict模式特点
将拼写错转成异常
- 无法意外创建全局变量
- 使引起静默失败的赋值操抛出异常
- 删除不可删除的属性时会抛出异常
- 重名属性被认为是语法错误
- 严格模式要求函数的参数名唯一
- 严格模式禁止八进制数字语法,不允许以零(0)开头的八进制语法
var a = 0o10; // ES6: 八进制
- 禁止设置primitive值的属性
简化变量使用
- 禁止with
- eval不再为上层范围引入新变量
- 严格模式禁止删除声明变量
让arguments和eval少了一些奇怪的行为
- 名称 eval 和 arguments 不能通过程序语法被绑定(be bound)或赋值
- 参数的值不会随 arguments 对象的值的改变而变化
- 不再支持 arguments.callee
"安全的" JavaScript
- 在严格模式下通过this传递给一个函数的值不会被强制转换为一个对象
- fun.caller和fun.arguments都是不可删除的属性而且在存值、取值时都会报错
- arguments不会再提供访问与调用这个函数相关的变量的途径
为未来的ECMAScript版本铺平道路
- 一部分字符变成了保留的关键字。这些字符包括implements, interface, let, package, private, protected, public, static和yield
- 严格模式禁止了不在脚本或者函数层面上的函数声明