开发者

Passing arbitrary number of parameter to a function in javascript

开发者 https://www.devze.com 2023-02-02 07:26 出处:网络
I would like to write a javascript function that works something like this... f([[\"a\"]], function(e){alert(e);});

I would like to write a javascript function that works something like this...

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");

I can think of a recursive solution for the looping, but how do I 开发者_开发百科send a "unknown" number of variables to a function?


If you put all your arguments into an array (lets call it foo), you can call a function fn with those arguments by using the apply-function.

fn.apply(null, foo)

The first argument (null in this case) is whatever you want this to be inside of the called function. null will probably work for you.


According to this page, you can access any/all arguments using the arguments variable:

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

[EDIT]

Now that I understand what you're trying to do, here's a (dirty) way to do it:

Seriously, don't do it this way. It's horrible. Puppies will die.

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);
}

And for a cleaner way:

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


Within the function you can use the variable arguments to see what was passed. 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"]


You can use the arguments variable that each function has to go through all the passed in 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;  
} 

See this article for a discussion of variable number of arguments.


You can use the arguments pseudo-array available within the function to get the arguments passed in without declaring them explicitly (i,e. regardless of whether you define an argument for a function, you can access everything passed in to the function via the arguments implicit variable within that function).

0

精彩评论

暂无评论...
验证码 换一张
取 消