0

看看这个例子:

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

4

2 回答 2

5

当不处于严格模式并且或者null作为undefined第一个参数传递给 时.apply(),将被设置为浏览器中this的全局对象。window

在严格模式下,它将设置this为您传递的实际值。


一般来说,非严格模式试图容忍错误,甚至自动为您“修复”一些错误。这有时被证明是一个问题,因为本应立即出现编码错误的事情被系统“掩盖”了。发明严格模式的原因有很多,其中一个原因是停止隐藏编码错误。

于 2015-10-28T02:05:32.407 回答
1

因为如果您不在严格模式下,这就是函数调用的工作方式。如果没有严格模式,函数的引用总是指向一个对象,如果没有给出其他对象this,它将是全局对象(即)。window

于 2015-10-28T02:08:16.877 回答