68213


Javascriptについて質問です。

下記のコードの結果は "-1 Hold" なのですが、  
①で自動的にループ？のように順番に数字を処理し、値を合計してから②に進んでいるようなのですが、何故でしょうか。

私の予想としては、①②を処理し、アウトプットしてから次の値に進むと思っていました。  
(予想していた結果： "1 Bet", "1 Bet", "-1 Hold", "0 Hold", "-1 Hold" )

[code]

       var count = 0;
        function cc(card) {
       ①  switch (card){
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
              count++;
              break;
            case 10:
            case "J":
            case "Q":
            case "K":
            case "A":
              count--;
              break;
           }   
        ② if (count > 0) {
            return count + " Bet";
          }
          else {
            return count + " Hold";
          }
        }
        
        cc(3); cc(7); cc("Q"); cc(8); cc("A");    //結果： -1 Hold
    
[/code]

お助けいただければ幸いです。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2020-07-01T10:01:23.710
68183
2020-07-02T07:55:31.140
2020-07-01T10:46:29.150
40891
40891
question
javascript
自動的にループしている？のは何故でしょうか。


Countの値を常にゼロスタートにしたいならvar count=0;を関数の先頭に移動してください  
つなげてよびだしても一個づつ呼び出しても処理順序はかわりません  
つなげて呼び出した場合は最後の文の値が全体の値として採用されてるんだと思います


CC BY-SA 4.0
2020-07-01T13:45:08.863
68189
2020-07-01T13:45:08.863
18637
68183
answer


### 自動的にループしているについて

[code]

    cc(3); cc(7); cc("Q"); cc(8); cc("A");
    
[/code]

を順番に実行して **最後に実行した 文の処理結果が実行結果として表示されている** のです。

例えば

[code]

    var a = 1; var b = 2 ; a + b;
    
[/code]

は `3` が表示されます。

> (予想していた結果： "1 Bet", "1 Bet", "-1 Hold", "0 Hold", "-1 Hold" )

のであれば

[code]

    [ cc(3), cc(7) , cc("Q") , cc(8) , cc("A") ]
    
[/code]

として すべての計算の実行結果を 1つの 配列にすると、  
全ての関数の処理結果を まとめて表示できます。

または

[code]

    console.log(cc(3)); console.log(cc(7)); console.log(cc("Q")); console.log(cc(8)); console.log(cc("A"));
    
[/code]

でも 結果を表示できます。

### 計算結果が累計されている件

JavaScript は 変数宣言した場所によって その変数スコープ（変数が有効な範囲、見える範囲）が  
変わります。

関数の外で宣言しているため、宣言した時に 1回 初期化され  
関数が呼び出されるたびにその変数の値を 更新されています。

`count` の値を 0 にしたいのであれば

関数の中に `var count = 0` 宣言を入れるか  
関数の先頭で `count = 0` と変数の初期化をするとよいでしょう。

`count` の値を 他の場所で使わないのであれば 関数の中に入れた方がいいと思います。


CC BY-SA 4.0
2020-07-01T23:02:03.997
68196
2020-07-01T23:02:03.997
18851
68183
answer


k system さんの回答が適切だと思います。

Suzuranさんのコメント

> JS Binを使って知りました。 consoleに 「cc(3); cc(7); cc("Q"); cc(8); cc("A");」と入れると、
> 結果が「-1 Hold」と出ました。

JS Bin のconsole欄に直接入力せずに次のコードで出力すると、「-1 Hold」を得られました。

[code]

    cc(3); cc(7); cc("Q"); cc(8); 
    console.log(cc("A"));
    
[/code]

JS Bin の console欄がちょっと特殊だと思うので、console欄に入力ではなく、console.log 命令を使うほうがよいと思います。


CC BY-SA 4.0
2020-07-02T07:55:31.140
68213
2020-07-02T07:55:31.140
21047
68183
answer