1

なぜ私が尋ねているのか

JavaScriptの文の省略形を理解するのに多くの問題を抱えifていましたが、それをうまく説明している記事やチュートリアルが見つかりませんでした。そして、それが私が私の小さなコードを最適化することに固執している理由です。また、私はJavaScriptを初めて使用するので、誰かがこのコードの短縮について基本的な理解を得ることができれば、コードの背後にある魔法を教えていただければ幸いです。

助けが必要なもの

多くの関数でまったく同じコードを使用します。したがって、私はそれを最適化し、コードのより短いバージョンにしたいです。

function welcomemessage() {
if (br == 1) {
hello();
}
else {
hey();
}
}
4

4 に答える 4

6

三項演算子を使用します。

function welcomemessage() {  
  (br == 1) ? hello() : hey();
}

三項演算子は便利で、理解するのは難しくありません。仕組みは次のとおりです。

(condition) ? (true) : (false)

編集:

JSは関数をファーストクラスのオブジェクトとして扱うため、ラッパーを作成することができます。以下のようなもの(ただしテストされていません)

function ternaryWrapper(br, functionTrue, functionFalse){
   return (br == 1) ? functionTrue : functionFalse;
}

//call it
ternaryWrapper(2,hello, hey);
于 2012-06-07T23:05:25.510 に答える
2

さらに短い:

function welcomemessage(br){
    [hello,hey][br-1]();    //This will work.
}
welcomemessage(1);  //hello();
welcomemessage(2);  //hey();

おもしろ情報:1

スクリプトを他の人が読みにくくするには、次のようにします。

function welcomemessage(){
    return br==1 && (hello(),1) || (hey(),1);    //This will work too.
}

1回答とは全く関係ありません。


アップデート

var something = ( (br == 1) ? hello() : hey() );

something値になるhello()か、hey()返されます。

于 2012-06-07T23:05:45.227 に答える
0

または:

var msgfuncs = [ hey, hello ];
function welcommessage() { msgfuncs[br](); }

(「br」が1でない場合は0であると想定しますが、これはもちろん無効な想定である可能性があります。)

異なる関数を使用して選択した場合は、配列を周囲の関数に直接配置します。

function welcomemessage() {
  [ hey, hello ][br]();
}

決定を下し、後で呼び出す関数を保存する場合は、次のように実行できます。

var messageFunction = [ hey, hello ][ br ];

その後いつでも:

messageFunction();
于 2012-06-07T23:08:51.690 に答える
0

が常に数値である場合br、xbonezの回答は、厳密な比較を使用して少し最適化できます===(少し速いため)。

function welcomemessage() {
    (br === 1) ? hello() : hey();
}

そしてもう1つの興味深いオプションは次のとおりです。

function welcomemessage() {
    (br - 1) ? hey() : hello();
}

この最後の関数が機能するのbr1、がの場合、 0(偽の値である)に変わり、falseと評価されてトリガーさhello()れ、残りの関数はトリガーされるためです。hey()

于 2012-06-07T23:30:41.443 に答える