前言
'use strict';
ES5的严谨模式,是选择使用受限制的JS编写程序的一种方式。严谨模式不仅仅是一个语法子集,它有意的为普通代码设置了不同的语义。因此,浏览器不能运行没有通过严谨模式特性测试的严谨模式代码。严谨模式代码和非严谨模式代码可以共存,因此,脚本可以在执行基础代码(正常模式)的基础上,增量的执行严谨模式代码。
严谨模式与普通JS语义不同的地方有:
1.严谨模式取消了一些js脚本不报错的地方,让这样的脚本开始抛出错误(提高严谨性,降低容错性,避免一些奇怪的错误发生)
2.严谨模式通过修改一些语言实现方面的错误,解决了js引擎很难优化的代码问题,换句话说,严谨模式的代码会比同样的非严谨模式的代码执行的更加高效。
3.严谨模式禁止了部分会出现在未来ES版本中的语法。此处,还可以这样理解,虽然禁止了部分会出现在未来版本中的语法,但是,严肃模式还是提倡了一些写法是与未来版本相兼容的。
严谨模式的使用
针对文件
在文件头部增加严谨模式的标签
"use strict";
console.log("这是严谨模式。");
针对函数
在函数头部增加严谨模式的标签
function strict(){
"use strict";
console.log("这是严谨模式。");
}
严谨模式的代码行为
(此处暂时来源于阮一峰的网络日志,阮大大要求“自由转载-非商用-非衍生-保持署名”,之后会结合官网,进行翻译和扩展,替换掉阮大大的这部分)
全局变量显式声明
静态绑定
禁止使用with语句
创设eval作用域
增强的安全措施
禁止this关键字指向全局对象
禁止在函数内部遍历调用栈
禁止删除变量
显式报错
重名错误
对象不能有重名的属性
函数不能有重名的参数
禁止八进制表示法
arguments对象的限制
不允许对arguments赋值
arguments不再追踪参数的变化
禁止使用arguments.callee
函数必须声明在顶层
将来Javascript的新版本会引入”块级作用域”。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
"use strict";
if (true) {
function f() { } // 语法错误
}
for (var i = 0; i < 5; i++) {
function f2() { } // 语法错误
}
保留字
来源 | 保留字 | 说明 |
---|---|---|
严谨模式 | implements | |
严谨模式 | interface | |
严谨模式 | let | |
严谨模式 | package | |
严谨模式 | private | |
严谨模式 | protected | |
严谨模式 | public | |
严谨模式 | static | |
严谨模式 | yield | |
ES5 | class | |
ES5 | enum | |
ES5 | export | |
ES5 | extends | |
ES5 | import | |
ES5 | super | |
浏览器 | const | . |