我有函数,将参数从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
?
答案 0 :(得分:4)
您创建一个包含您需要传递的所有参数的数组:
var combinedArray = [p1, p2].concat(Array.prototype.slice.call(arguments));
这个功能:
p1
和p2
然后您可以将其称为b.apply(this, combinedArray)
PS:
Array.prototype.slice.call(arguments)
用于将arguments
对象转换为真实数组。
答案 1 :(得分:1)
为了将变量传递给另一个函数,您必须将它们添加到您向apply
提供的数组中。但是你不能将它们直接添加到arguments
变量,因为它不是真正的数组。首先,您必须构建一个新的数组,然后传递给apply
。您可以arguments
将var 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];
如果您需要添加p1
和p2
,可以使用unshift
答案 2 :(得分:-1)
试试这段代码。
void temp() {
var animals = ["cat", "dog", "horse", "cow"];
animals.forEach(function (eachName, index) {
console.log(index + 1 + ". " + eachName);
});
}