请您解释一下在下面的代码示例中使用func.apply(null, arr)
和func.apply(this, arr)
之间的区别吗?
var Foo = function() {
function useMe(a, b, c)
{
document.body.innerHTML =
'<p>a: ' + a + '<br>b: ' + b + '<br>c: ' + c + '</p>'
}
function go()
{
var arr = ['foo', 'bar', 'baz']
useMe.apply(null, arr)
}
return {
go: go,
useMe: useMe
}
}()
Foo.go()
var Foo = function() {
function useMe(a, b, c)
{
document.body.innerHTML =
'<p>a: ' + a + '<br>b: ' + b + '<br>c: ' + c + '</p>'
}
function go()
{
var arr = ['foo', 'bar', 'baz']
useMe.apply(this, arr) // USING this INSTEAD OF null
}
return {
go: go,
useMe: useMe
}
}()
Foo.go()
JSFiddle:http://jsfiddle.net/3DvtA/
我理解当null
用作apply
函数的第一个参数时,全局对象即window
用作this
的{{1}}参数}}。对于像上面代码一样简单的用法,作为useMe
函数的第一个参数传递的内容真的很重要吗?
答案 0 :(得分:2)
所有功能都有一个所谓的上下文。此上下文是一个对象,位于this
变量中。
警告“Hello World”的示例:
function hello() {
alert(this.greeting);
}
hello.apply({greeting: "Hello World"});
您的功能无法访问this
,因此无论您指定 null 还是此,在您的上下文中都无关紧要。
从ES 5严格模式开始,window
不再是函数的标准上下文,而是包含值undefined
。
答案 1 :(得分:2)
apply
的第一个参数是在函数调用中用作this
的值。由于useMe
不使用this
,因此您提供的内容无关紧要。提供null
或undefined
告诉apply
使用全局对象(在松散模式下)或undefined
(在严格模式下)。