2017-03-28 14 views
0

マイコード:関数の代わりに値を返すように私の無名関数を取得するには?

var host_choice = function(){ 
    var choice; 
    do { 
     choice = shuffled_list[random_choice()]; 
    } while (choice == "car" || choice == player_choice); 

    return choice; 
}; 

ここhost_choiceは、私が呼び出す必要があります機能です。しかし、私はchoiceを含む変数にする方法がわかりません。私はここで何か基本的なものが欠けていることを知っていますが、それを行う方法は?

注:私のshuffled_listには3つの要素が含まれています。私のhost_choice変数に要素carplayer_choiceが含まれていないようにしたいのですが、これを行うための「もっと賢い」方法がありますか?

+0

ちょうどそれを呼び出します... –

+0

'host_choice();' –

+2

[IIFE](http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript)のように見えます。このトリックは – taguenizy

答えて

2

直接呼び出すことができます。

var host_choice = (function(){ 
    var choice; 
    do { 
     choice = shuffled_list[random_choice()]; 
    } while (choice == "car" || choice == player_choice); 

    return choice; 
})(); 

これはIIFE(Immediately Invoked Function Expression)の例です。 Javascriptのモジュール性など、さまざまな理由から非常に便利です。

1

あなたはそれの後()と、それを呼び出すと思います:それはあなたがどこかの関数への参照を保持していないので、それだけで今まで、一度だけ実行されることを意味することを

var host_choice = function(){ 
    var choice; 
    do { 
     choice = shuffled_list[random_choice()]; 
    } while (choice == "car" || choice == player_choice); 

    return choice; 
}(); // <==== 

注意。あなたが頻繁すぎて、これは機能部の周り()と書かれた表示されます

:あなたのケースでは

var host_choice = (function(){ 
    var choice; 
    do { 
     choice = shuffled_list[random_choice()]; 
    } while (choice == "car" || choice == player_choice); 

    return choice; 
})(); // <==== 

を、それは完全にスタイルの問題だ、あなたはそれらを必要としません。 戻り値を使用していなかった場合は、functionキーワードが関数宣言を開始しているとパーサーが考えなかったので、戻り値が必要になります。 (どこにスタイルが入っているか:厳密に必要でないときでも、いつでもそれらを含めることを好む人もいます。が時々です。)そのビットの詳細はmy answer hereです。