严格模式
javascript除了提供正常的模式外,还提供了严格模式,ES5的严格模式是采用有限制的javascript变体的一种方式,即在严格条件下运行的Js代码。
严格模式在IE10以上版本浏览器才会支持,旧版本浏览器会被忽略。
一、严格模式对正常javascript语法做了一些更改;
1、消除了javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
2、消除代码运行的一些不安全之处,保证代码运行安全。
3、提高编译器效果、增加运行速度。
4、禁用了在ECMAScript的未来版本可能定义的语法,为未来新版本的javascript做好铺垫。比如一些保留字:class、enum、export、extends、import、super不能做变量名。
二、开启严格模式
严格模式可应用到整个脚本或个别函数中,因此在使用时,我们可以将严格模式分为脚本开启严格模式和为函数开启严格模式。
1、为脚本开启严格模式需要在所有语句前放一个特殊语句“use strict”
<script>
'use strict';
// 下面的js 代码会按照严格模式执行代码
</script>
2、为函数开启严格模式需要将‘use strict’声明放在函数体所有语句之前。
<script>
function fn() {
'use strict';
//下面按照严格模式
}
function fn() {
'use strict';
//里面的代码按照普通模式
}
</script>
三、严格模式的变化
3.1、变量
1、严格模式变量必须先声明再使用
2、严禁删除已经声明的变量
3.2、严格模式的this指向
1、以前在全局作用域函数的this指向window
2、严格模式下全局作用域中函数this指向undefined.
3、以前构造函数不加new也可以调用,当普通函数,this指向全局
4、严格模式下构造函数不加new调用,this会报错。
5、new实例化的构造函数指向创建的对象实例。
6、定时器的this还是window
7、事件、对象还是指向调用者
3.3、函数变化
1、函数不能有重名参数
2、函数必须声明在顶层(不允许在非函数代码块中声明函数)