.call和.apply之间的区别

时间:2011-09-30 10:13:06

标签: javascript native

是否有一种简单的方法可以将所有参数从一个函数传递到另一个函数并发送this

我试过这个:http://jsfiddle.net/v92Xr/

var f1 = function() {
    f2.call(this, arguments);
};
var f2 = function() {
    console.log(arguments);
};
f1("abc", "def", "hij");

但它让我从f1的所有参数都堆叠在f2参数0:

f2->arguments[0] == f1->arguments

好的,当我运行apply方法时,它可以正常运行:http://jsfiddle.net/v92Xr/1/

var f1 = function() {
    f2.apply(this, arguments);
};
var f2 = function() {
    console.log(arguments);
};
f1("abc", "def", "hij");

所以有人可以告诉我callapply之间有什么区别吗?

2 个答案:

答案 0 :(得分:4)

我认为你刚刚发现了自己的不同之处。

call几乎与您通常调用函数的方式相同,只是在参数列表的开头有一个额外的参数,您可以在其中放置this对象的引用。

apply也有第一个参数作为this对象,但第二个参数应该是一个数组。此数组用于提供被调用函数所期望的所有参数。元素0映射到函数参数列表中的第一个参数,元素1映射到第二个参数,依此类推。

答案 1 :(得分:1)

致电 MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

  

调用具有给定此值的函数和单独提供的参数

fun.call(thisArg[, arg1[, arg2[, ...]]])

应用 MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

  

使用给定的此值调用函数,并以数组的形式提供参数。

fun.apply(thisArg[, argsArray])