严格模式对 Javascript 的语法和行为,都做了一些改变。
1.变量规定
①在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,变量都必须先用var命令声明,然后再使用。
②严禁删除已经声明变量。例如,delete x;语法是错误的。
2.严格模式下this指向问题
① 以前在全局作用域函数中的this指向window对象。
②严格模式下全局作用域中函数中的this是undefined。
③以前构造函数时不加new也可以调用,当普通函数,this指向全局对象
④严格模式下,如果构造函数不加new调用,this会报错.
⑤ new实例化的构造函数指向创建的对象实例。
⑥定时器this还是指向window。
⑦事件、对象还是指向调用者。
3.函数变化
①函数不能有重名的参数。
②函数必须声明在顶层、新版本的 JavaScript 会引入“块级作用域”(ES6中已引入)。为了与新版本接轨,不允许在非函数的代码块内声明函数。