0

別の関数によって作成されたランダム カードが既に使用されているかどうかをチェックする単純な関数 (checkCard) を作成しようとしています。電話の発信元は次のとおりです。

var uC;
// some code including creating the random card
checkCard(card, pCards, dCards, uC);
// uC becomes unidentified here

そして、これがcheckCard自体です:

function checkCard(card, pCards, dCards, uC) {
    var tCards = pCards.concat(dCards), // an array containing all cards which are in use already
    i;
    for (i = 0; i < tCards.length; i = i + 1) {
        if (card.suit === tCards[i].suit && card.type === tCards[i].type) {
            uC = true; // card is in use already
            break;
        } else {
            uC = false; // card is not in use
        }
    }
    // it still works here: uC is either true or false
    return uC;
}

}

どういうわけかうまくいきません: checkCard は uC を正しく計算し、"return uC" の直前に値 "true" または "false" を保持します。しかし、元の関数に戻った後、uC は「未確認」になります。私は何を間違っていますか?

前もって感謝します!

4

2 に答える 2

0

元のコードでは、必要です

uC = checkCard(card, pCards, dCards, uC);

それを行うかuC、関数呼び出しを渡さないでください。そのままにしておくと、引き続きグローバル変数になりますがuC、関数で行った方法はローカル変数です。

于 2013-08-27T21:47:57.927 に答える