2012-04-27 12 views
3

私は任意の数の引数を取ることができます機能を定義したが、何もする必要はありません。パス変数の引数 - javascriptの

function MyFunction() { //can take 0, 1, 1000, 10000, n arguments 
//function code 
} 

今私は、可変個の引数でのMyFunctionを呼び出す別の関数を記述したいと思います各時間:関数の引数の配列を渡すために使用することができる

+1

をevalにそれを渡します。 – Bergi

+0

チップをありがとう! – Stefano

答えて

8

Function.apply予め:)で

function Caller(n) { 
var simple_var = "abc"; 
MyFunction() //how can i pass simple_var to MyFunction n times? 
} 

おかげかのように各要素

function Caller(n) { 
    var simple_var = "abc"; 

    // create an array with "n" copies of the var 
    var args = []; 
    for (var i = 0; i < n; ++i) { 
     args.push(simple_var); 
    } 

    // use Function.apply to send that array to "MyFunction" 
    MyFunction.apply(this, args); 
} 

フォートワース言うために、WebKitの上argument length is limited to 65536:配列は、個々の引数として渡されていました。

+2

1. args.push()の代わりにargs [args.length]を使用します。2.ソリューションは、n個の異なるパラメータではなく、配列としてパラメータを送信します。 – Amberlamps

+2

@Amberlamps - このような状況には 'apply'が使われます。それは 'n'引数を提出する –

+0

@ジビアブラハム:あなたは正しい!私の間違い! – Amberlamps

-3

あなたはevalを使うことができます(私はeval is evilです)。ループ構造の文字列のために

var myCall = "Myfunction(abc, abc, abc)"; 

、その後、あなたがいる限り、彼らは何のコンストラクタではないとして、大文字、あなたの関数に名前を付けるべきではありません

function Caller(n) { 
var simple_var = "abc"; 
    eval(myCall); 
} 
+1

決して、今までに、 'eval'を使用してください。 – Alnitak