一、概念
ES5 除了正常运行模式(又称为混杂模式),还添加了第二种运行模式:严格模式”(strict mode)。
严格模式顾名思义,就是使 JavaScript 在更严格的语法条件下运行
二、作用
- 消除 JavaScript 语法的一些不合理、不严谨之处,减少一些怪异行为
- 消除代码运行的一些不安全之处,保证代码运行的安全
- 为未来新版本的 JavaScript 做好铺垫
三、使用
严格模式通过在脚本或函数的头部添加 use strict;
表达式来声明
如果浏览器不支持,只解析为一条简单的语句, 没有任何副作用
//1. 全局
'use strict';
b = 66;
console.log(b); //b is not defined
//2. 函数内部
//严格模式 是有作用域
function fn(){
'use strict'
a =12;
console.log(a);
}
fn(123);
四、限制
-
不允许使用未声明的变量
"use strict"; x = 3.14; // 报错 (x 未定义)
-
禁止自定义的函数中的 this 指向 window
// 函数内部的this指向 会变成undefined function fn2(){ 'use strict' console.log(this);//undefined } fn2();
-
创建 eval 作用域,全局作用域 eval 就是一个函数, 将字符串进行 JS 语法解析并执行,在作用域 eval() 创建的变量不能被调用
'use strict' eval('var a = 666; console.log(a);')//666 console.log(a,'外部');// a is not defined
-
对象不能有重名的属性(Chrome 已经修复了这个 Bug,IE 还会出现)
-
函数不能有重复的形参
'use strict' function fn3(a,a){ console.log(a+a); } console.log(fn3(3,4));
-
新增一些保留字, 如: implements interface let private protected public