严格模式
JavaScript 除了提供正常模式外,还提供了严格模式.ES5的严格模式是采用具有限制性,JavaScript 变体的一种方式,即在严格的条件下运行JS代码.
严格模式在IE10 以上的版本的浏览器中才会被支持,旧浏览器中会被忽略.
严格模式对正常Javascript语义做了一些更改:
1.消除了Javascript语法的一些不合理,不严谨之处,减少了一些怪异行为.
2.消除代码运行的一些不安全之处,保证代码运行安全
3.提高编译器效率,增加运行速度
4.禁用了ECMAScript的未来版本中可能会定义的一些语法,为未来新版本的Javascript 做好铺垫.比如一些保留字如:class,enum,export,extends,import,super不能做变量名
开启严格模式
严格模式可以应用到整个脚本或个别函数中,因此在使用时,我们可以将严格模式分为脚本开启严格模式和为函数开启严格模式两种情况.
1.为脚本开启严格模式
为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句"use strict"; 或(' use strict ' ; )
2.为整个函数开启严格模式
为整个函数开启严格模式,需要把'use strict' ; 或(' use strict ' ; ).声明放在函数体所有语句之前
严格模式中的变化
严格模式对Javascript的语法和行为,都做了一些改变
1.变量规定
①在正常模式中,如果一个变量没有声明就赋值,默认是全局变量
在严格模式中,禁止这种用法,变量都必须要先用var命令声明,然后再使用
②严禁删除已经声明变量,例如:delete x; 语法是错误的.
2.严格模式下this指向问题
①以前在全局作用域函数中的this指向window对象
②严格模式下全局作用域中函数中的this是undefined
③ 以前构造函数时不加new也可以调用,当普通函数,this指向全局对象
④严格模式下,如果构造函数不加new调用,this会报错
⑤new实例化的构造函数指向创建的实例对象
⑥定时器this还是指向window
⑦事件,对象还是指向调用者.
3.函数变化
① 函数不能有重名的参数
②函数必须声明在顶层,新版本的javaScript 会引入"块级作用域"(ES6中已引入).为了与新版本接轨,不允许在非函数的代码块内声明函数