严格模式

157 阅读1分钟

es5的严格模式:

1.静默失败提升为错误

如,true.name = 'jac',这句话在松散模式下是不报错的,但是有没有任何意义,在严格模式下就会报错;再如:

let obj = {}  
Object.defineProperty(obj, 'name', {
    writable: false,
    value: 'n'
})  
obj.name = 'marry'

将obj的name熟悉的writeable改为false,在下面进行修改时,松散模式不会报错,但是又修改不了;严格模式则会报错

2.意外创建全局变量
function fun() {
    age = 12
}
fun()
console.log(age)  //  12  

松散模式下,age 并没有在全局创建,但事实却是可以在输出,其实是在全局创建了;如果在严格模式下,则报错:age is not defined

3.函数传入相同参数
function fun(num1, num2, num1) {
  console.log(num1, num2, num1)
}
fun(1,2,3)  // 3 2 3

很明显,上面的函数有相同的形参,属于语法错误,但这在松散模式下并没有报错;如果开启严格模式,则会报错

4.自执行函数的this指向undefined
function fun() {
    console.log(this)
}  
fun()  

松散模式下,这里的this指向window ,但是严格模式下为undefined;