如何在javascript中应用参数传递给函数?

时间:2015-09-08 08:27:28

标签: javascript

我有函数,将参数从a传递给b

但似乎apply只能访问2个参数

function a(){
  var p1=1;
  var p2=2;
  b.apply(this,arguments);
}


function b(){
    //so how to get p1,p2 in this function?
    console.log(arguments);
}

a(3,4);

那么如何在函数p1中传递p2 a并在函数1,2,3,4中获取b

3 个答案:

答案 0 :(得分:4)

您创建一个包含您需要传递的所有参数的数组:

var combinedArray = [p1, p2].concat(Array.prototype.slice.call(arguments));

这个功能:

  1. 创建一个数组,前两个元素为p1p2
  2. 并将arguments数组附加到它。
  3. 然后您可以将其称为b.apply(this, combinedArray)

    PS:

    Array.prototype.slice.call(arguments)用于将arguments对象转换为真实数组。

答案 1 :(得分:1)

为了将变量传递给另一个函数,您必须将它们添加到您向apply提供的数组中。但是你不能将它们直接添加到arguments变量,因为它不是真正的数组。首先,您必须构建一个新的数组,然后传递给apply。您可以argumentsvar newArray = Array.prototype.slice.call(arguments);转换为数组 - 这会从arguments创建新数组。现在,您可以像使用常规数组(newArray.push(p1);newArray = newArray.concat([p1, p2]);等)一样使用它。然后将此数组传递给apply而不是arguments

所以你的代码会改变这种方式:

function a(){
  var p1=1;
  var p2=2;
  var argumentsArray = Array.prototype.slice.call(arguments);
  b.apply(this, argumentsArray.concat([p1, p2]));
}


function b(){
    console.log(arguments);
}

a(3,4); // output: [3, 4, 1, 2];

如果您需要添加p1p2,可以使用unshift

答案 2 :(得分:-1)

试试这段代码。

void temp() { 
    var animals = ["cat", "dog", "horse", "cow"];
    animals.forEach(function (eachName, index) {
     console.log(index + 1 + ". " + eachName); 
    });
}