看看这个例子:
function aaa () {
console.dir(this)
}
function bbb () {}
aaa.apply(undefined, [1,2,3]) // this in aaa is `window` object
aaa.apply(bbb, [1,2,3]) // this in aaa is `bbb` function
为什么在第一个应用案例中this
设置为window
,即使我试图强制它是undefined
?
看看这个例子:
function aaa () {
console.dir(this)
}
function bbb () {}
aaa.apply(undefined, [1,2,3]) // this in aaa is `window` object
aaa.apply(bbb, [1,2,3]) // this in aaa is `bbb` function
为什么在第一个应用案例中this
设置为window
,即使我试图强制它是undefined
?
当不处于严格模式并且或者null
作为undefined
第一个参数传递给 时.apply()
,将被设置为浏览器中this
的全局对象。window
在严格模式下,它将设置this
为您传递的实际值。
一般来说,非严格模式试图容忍错误,甚至自动为您“修复”一些错误。这有时被证明是一个问题,因为本应立即出现编码错误的事情被系统“掩盖”了。发明严格模式的原因有很多,其中一个原因是停止隐藏编码错误。
因为如果您不在严格模式下,这就是函数调用的工作方式。如果没有严格模式,函数的引用总是指向一个对象,如果没有给出其他对象this
,它将是全局对象(即)。window