在javascript中将任意数量的参数传递给函数

时间:2010-12-30 15:56:19

标签: javascript

我想编写一个类似于此的javascript函数...

f([["a"]], function(e){alert(e);});
// results in alert("a");

f([["a"], ["b"]], function(e1,e2){alert(e1 + ":" + e2);});
//results in alert("a:b");

f([["a", "b"], ["c"]], function(e1,e2){alert(e1 + ":" + e2);});
//results in alert("a:c");alert("b:c");

我可以想到循环的递归解决方案,但是如何向函数发送“未知”数量的变量?

5 个答案:

答案 0 :(得分:3)

如果将所有参数放入数组(让我们称之为foo),则可以使用fn - 函数调用带有这些参数的函数apply

fn.apply(null, foo)

第一个参数(在这种情况下为null)是您希望this在被调用函数内的任何内容。 null可能适合你。

答案 1 :(得分:2)

根据this page,您可以使用arguments变量访问任何/所有参数:

function f() {
    for( var i = 0; i < arguments.length; i++ ) {
         //do something with arguments[i]
    }
}

[编辑]

既然我明白你要做什么,这是一种(肮脏)的方式:

说真的,不要这样做。这太糟糕了。小狗会死。

function f(arr, fn) {
    var s = "fn(";
    for( var i = 0; i < arr.length; i++ ) {
        //you can implement your recursive code here if you like; I'm just doing the base cases
        s += arr[i];
        if(i+1 < arr.length) {
            s += ",";
        }
    }
    s += ");";
    eval(s);
}

以更清洁的方式:

function f(arr, fn) {
    fn.apply(this, arr);
}

答案 2 :(得分:0)

在函数中,您可以使用变量arguments来查看传递的内容。 IE

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

blah(1, 2); // [1, 2]
blah([1, 2], [3]); // [[1,2], [3]]
blah(1, [2, 3], "string"); // [1, [2, 3], "string"]

答案 3 :(得分:0)

您可以使用函数中可用的arguments伪数组来获取传入的参数,而无需明确声明它们(即,无论您是否为函数定义参数,您都可以访问传递的所有内容通过该函数中的arguments隐式变量进入函数。)

答案 4 :(得分:0)

您可以使用每个函数必须遍历所有传入参数的arguments变量。

function myConcat(separator) {  
   var result = ""; // initialize list  
   // iterate through arguments  
   for (var i = 1; i < arguments.length; i++) {  
      result += arguments[i] + separator;  
   }  
   return result;  
} 

有关可变数量的参数的讨论,请参阅this文章。