我刚刚在JavaScript代码库中遇到了以下语句:
this.fn.apply(this, arguments);
根据我对apply
函数的理解,它的目的是更改this
的值。但是,由于函数附加到的同一个对象被传递给apply
,我无法看到它与此之间的任何区别:
this.fn(arguments);
我的理解是正确的还是第一种方式有所不同?
答案 0 :(得分:8)
apply
接受一系列参数:
给定arguments = [1,2,3]
。
this.fn.apply(this, arguments);
会给你:
this.fn(1,2,3);
但:
this.fn(arguments);
会给你:
this.fn( [1,2,3] );
答案 1 :(得分:2)
apply
中的第二个参数应该是类似数组的,arguments
是一个类似于数组的对象length
,该类数组对象会自动转换为一组参数传递给apply
这是一个简单的例子
var arr = ['val1', 'val2'];
test.apply(null, arr);
function test(arg1, arg2) {
// arg1 == val1
// arg2 == val2
}
如果你直接打电话
var arr = ['val1', 'val2'];
test(arr);
function test(arg1, arg2) {
// arg1 == ['val1', 'val2'];
// arg2 == undefined
}
所以有一点不同,当你直接传递arguments数组时,它只是作为第一个参数传递给函数,但是当传递{{1数组被转换为一组参数。
另一方面, apply()
接受一组参数。
call()