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;