我正在尝试编写一个简单的函数(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变得“不明”。我做错了什么?
提前致谢!
答案 0 :(得分:1)
该函数不会修改传递给函数的变量uC,而是修改它的本地副本。您必须从返回中捕获uC:
uC = checkCard(card, pCards, dCards);
由于您要返回变量,因此不需要将其作为参数传递,然后您将在函数中创建局部变量。
function checkCard(card, pCards, dCards) {
var uC;
....}
答案 1 :(得分:0)
在原始代码中,您需要
uC = checkCard(card, pCards, dCards, uC);
或者在函数调用中没有传递uC
- 如果你把它关掉它将继续是一个全局变量,而你在uC
中的方式是{{1}} function是一个局部变量。