严格模式
严格模式下,如果没有明确指定函数的调用者,最后的结果为:undefined
'use strict'
function fn2 () {
console.log('this=>',this)
}
// 函数调用时指定不明确,结果为undefined
fn2()
'use strict'
const obj = {
name:'lss',
age:21,
handelClick:function(){
console.log(this)
}
}
// this指向明确,this 指向obj对象
obj.handelClick()
// 但是当函数发生了赋值,然后重新调用,此时this指向就不明确了,结果为undefined
const fn = obj.handelClick
fn()
非严格模式
非严格模式下,如果没有明确指定函数的调用者,默认会以当前的环境作为this的指向
function fn2 () {
console.log('this=>',this)
}
// 函数调用时指定不明确,默认指向当前环境的this,结果为window
fn2()
const obj = {
name:'lss',
age:21,
handelClick:function(){
console.log(this)
}
}
// this指向明确,this 指向obj对象
obj.handelClick()
// 函数发生了赋值,然后重新调用,此时默认指向当前环境的this,也就是window
const fn = obj.handelClick
fn()
总结:
严格和非严格最大的区别是有没有默认绑定
在严格模式下任何函数的调用都必须显示的指定,否则就是 undefined