JavaScript严格模式,即在严格的条件下运行。
使用严格模式的目的:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫
1.为脚本开启严格模式
为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句"use strict"。单引号也可。
<script>
'use strict';
</script>
或者:
<script>
(function(){
'use strict';
var num = 10;
})()
</script>
<script>
//此时只在fn函数内部添加了严格模式
function fn() {
'use strict';
}
function fun () {
}
</script>
2.严格模式中的变化
(1)变量规定
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,变量先用var声明,之后才能使用。
不能随意删除已经声明好的变量。
(2)this指向
以前在全局作用域下,this指向window。
现在在严格模式下,全局作用域中函数中的this的值是undefined。
严格模式下,构造函数不加new调用,如果给它赋值this会报错。(以前直接调用构造函数,就把它当做普通函数进行调用,this指向全局对象)。
new实例化的构造函数指向创建的对象实例。
严格模式下,定时器内部的this指向还是window。
事件、对象还是指向调用者。
(3)函数变化
严格模式下的函数的参数不允许有重名现象。
函数必须声明在顶层,新版本的JavaScript会引入"块级作用域"(es6已引入),为了与新版本接轨,不允许在非函数的代码块内声明函数。(非函数的代码块有if语句的花括号内,for循环的花括号内)