2013-08-27 7 views
0

Я пытаюсь написать простую функцию (checkCard), которая проверяет, используется ли случайная карта, созданная другой функцией, или нет. Вот место, вызов производится из:Javascript не возвращает значение

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 правильно вычисляет УНЦ и держит значение «true» или «false» перед «return uC». Но после возврата к исходной функции uC становится «неопознанным». Что я делаю не так?

Заранее благодарен!

+0

Вы, кажется, не присваивая значение возврата к чему-либо ... –

ответ

1

Функция не изменяет переменную uC, переданную в функцию, а вместо нее ее локальную копию. Вы должны захватить Uc от возвращения:

uC = checkCard(card, pCards, dCards); 

Поскольку вы возвращаете переменную, вам не нужно, чтобы передать его в качестве параметра, и вы бы тогда создать локальную переменную в функции вместо.

function checkCard(card, pCards, dCards) { 
    var uC; 
    ....} 
+0

Если вы не передадите его в качестве параметра, вам не нужно его возвращать. –

+0

@Grim ... расширен мой ответ –

+0

Конечно - но если вы его не объявили, он останется глобальным, и исходный код будет работать (без необходимости возвращать переменную 'uC' или отправлять ее). –

0

В исходном коде, вам нужно

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

Либо так, либо не проходят uC в вызове функции - если вы оставите его он будет продолжать быть глобальной переменной, а так, как вы 've сделал это uC в функции является локальной переменной.

+0

и вам не нужно проходить 'uC' в качестве параметра – Orlando

+0

Не правда ли * или * Вам не нужно передать uC в качестве параметра? Если бы ОП не делал этого, то uC был бы глобальным. Я должен ответить на этот вопрос. –

+0

Да, конечно, вам нужно определить его внутри функции. – Orlando

Смежные вопросы