严格模式是ES5之后才有的,兼容IE10以上
'use strict’开启严格模式
可以分为脚本开启和函数开启严格模式
变化
1.变量
不能不声明就赋值;不能使用delete删除已经声明的变量。
2.this指向
全局作用域对的函数this在未开启严格模式时this指向window,开启严格模式指向undefined。
构造函数在未开启严格模式时不使用new关键字可以当做普通函数调用this指向全局对象,开启严格模式时必须使用new关键字否则this会报错。
其他不变。
3.函数
<script>
'use strict';
// 1. 我们的变量名必须先声明再使用
// num = 10;
// console.log(num);
var num = 10;
console.log(num);
// 2.我们不能随意删除已经声明好的变量
// delete num;
// 3. 严格模式下全局作用域中函数中的 this 是 undefined。
// function fn() {
// console.log(this); // undefined。
// }
// fn();
// 4. 严格模式下,如果 构造函数不加new调用, this 指向的是undefined 如果给他赋值则 会报错.
// function Star() {
// this.sex = '男';
// }
// // Star();
// var ldh = new Star();
// console.log(ldh.sex);
// 5. 定时器 this 还是指向 window
// setTimeout(function() {
// console.log(this);
// }, 2000);
// a = 1;
// a = 2;
// 6. 严格模式下函数里面的参数不允许有重名
// function fn(a, a) {
// console.log(a + a);
// };
// fn(1, 2);
function fn() {}
</script>