2012-12-21 16 views
5

変数を設定するために引数付きのインライン関数を使用したいと考えています。インライン関数への引数の受け渡し

var something = 10; 

var something_else = 15; 

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(); 

をこの場合は、「dynamic_valueは」「Y」である必要があります:ここで私がしようとしてるかの煮詰めバージョンは(どうやらこの時点で唯一の疑似コードがある)です。問題は、変数 "something"と "something_else"がこのインライン関数の内部で決して見られないということです。

インライン関数に引数をどのように送信しますか?

編集:私はjqueryを使用していますが、実際にはこの質問には当てはまりません。

答えて

13

var dynamic_value = (function(something, something_else) { 
    ... 
})(value_for_something, value_for_something_else); 
+0

Oooohhhなので、これらの括弧は機能の括弧に入ります。それは動作します。ありがとうございました! – Ben

+1

そのような関数を呼び出すことは、他の関数を呼び出すことと同じです。構文は少し奇妙に見えますが、実際には違いはありません。 –

5

機能を呼び出すあなたはこのようにそれを呼び出す必要がありますときにそれらを送信します。

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(something,something_else); 

あなたが関数のパラメータに同じ名前を定義しているときに、この理由は、彼らは、パラメータの名前だけです、変数が挿入されません。最後の行は、実際の変数が渡される関数への呼び出しです。

さらに、クロージャを作成しました。クロージャは、それを含む関数で宣言されたすべての変数にアクセスできます。このコードのもう1つの興味深い事実は、包含する関数レベルで定義された変数が、クロージャー関数の一部である変数によってシャドウイングされていることです。その理由は明らかです。クロージャの変数名は、包含する関数の変数名と同じです。

0

ここでは、dynamic_valuesomethingにバインドするだけで、something_elseにバインドしないと思っています。

var base_value = 10; 

var something_else = 15; 

var dynamic_value = (function(base_value){ 
    return function (compare) { 
     if(base_value == compare){ 
      return "x"; 
     } else { 
      return "y"; 
     } 
    }; 
})(base_value); 

alert(dynamic_value(something_else)); // "y" 
alert(dynamic_value(10)); // "x" 
関連する問題