如果我使用`function.apply(undefined,args)`,为什么`this`设置为`window`?

bod*_*ydo 0 javascript this apply window-object

看看这个例子:

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
Run Code Online (Sandbox Code Playgroud)

为什么this设置为window第一个应用案例,即使我试图强迫它undefined

jfr*_*d00 5

当不处于严格模式且任何一个nullundefined作为第一个参数传递时.apply(),this将被设置为window浏览器中的全局对象.

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


一般来说,非严格模式试图容忍错误,甚至会自动"修复"一些错误.这被证明有时是一个问题,因为应该立即编码错误的东西被系统"掩盖"了.出于多种原因发明了严格模式,其中一个原因是停止隐藏编码错误.