6

引数付きのインライン関数を使用して変数を設定したいと思います。これが私が試みているものの要約版です(これは明らかに現時点では疑似コードにすぎません):

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を使用していますが、それはこの質問には実際には当てはまらないかもしれません。

4

3 に答える 3

18

関数を呼び出すときにそれらを送信します

var dynamic_value = (function(something, something_else) {
    ...
 })(value_for_something, value_for_something_else);
于 2012-12-21T17:45:09.627 に答える
5

このように呼ぶ必要があります。

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

この理由は、関数パラメーターで同じ名前を定義している場合、それらはパラメーターの名前にすぎず、変数はそこに挿入されないためです。最後の行は、実際の変数が渡される関数の呼び出しです。

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

于 2012-12-21T17:45:20.857 に答える
0

dynamic_valueここでは、バインドするだけで、バインドしsomethingたくないと推測します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"
于 2012-12-21T17:49:28.593 に答える