this.fn.apply(this,arguments)是多余的吗?

时间:2014-07-31 13:24:06

标签: javascript

我刚刚在JavaScript代码库中遇到了以下语句:

this.fn.apply(this, arguments);

根据我对apply函数的理解,它的目的是更改this的值。但是,由于函数附加到的同一个对象被传递给apply,我无法看到它与此之间的任何区别:

this.fn(arguments);

我的理解是正确的还是第一种方式有所不同?

2 个答案:

答案 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数组被转换为一组参数。

EXAMPLE

另一方面,

apply()接受一组参数。

call()