我试图从已从函数参数传递的变量值中确定变量的目标。我不知道该怎么做。附言顶部的变量也被其他函数使用
let cardvalue0 = false;
let cardvalue1 = false;
function myfunction (card) {
if (card === false) {
card = true;
//ether cardValue 0 or 1 should now be true
return card;
}
}
// exturnal html
<button onclick="myfunction("cardValue0")"></button>
<button onclick="myfunction("cardValue1")"></button>
我的新尝试
//define cards
let card0State = false;
let card1State = false;
//toggle card status (read or not)
function cardToggle(card) {
console.log(card);
card = !card
console.log(card);
return card;
}
// external html
<button onclick="myfunction(cardValue0)"></button>
<button onclick="myfunction(cardValue1)"></button>
答案 0 :(得分:0)
是否可以将card0State和card1State存储在一个对象中?然后,您可以将它们引用为对象的键。
const cardvalues = {};
cardvalues.cardvalue0 = false;
cardvalues.cardvalue1 = false;
function myfunction (cardNumber) {
if (cardvalues[cardNumber] === false) {
cardvalues[cardNumber] = true;
//ether cardValue 0 or 1 should now be true
return cardvalues[cardNumber];
}
}
// exturnal html
<button onclick="myfunction('cardvalue0')"></button>
<button onclick="myfunction('cardvalue1')"></button>
然后,您没有在函数范围内声明新变量,而是直接更改对象上的键值。这通常比可变变量模式要好。
答案 1 :(得分:0)
更简单的方法是在Map或对象中移动原始变量(cardvalue0
和cardvalue1
),因此您可以:
cards = {
cardvalue0 : false,
cardvalue1 : false
}
function foo(cardName) {
cards[cardName] = !cards[cardName];
return cards[cardName]
}
}
如果您无法移动cardvalue0
和cardvalue1
,则可以对它们进行硬编码,但是它很快就会变得难看。
function foo(cardName) {
if(cardName === "cardvalue0") {
cardValue0 = !cardValue0;
return cardValue0;
} else if(cardName === "cardvalue1")
cardValue1 = !cardValue1;
return !cardValue1;
}
eval是从字符串表示形式获取变量的唯一方法,但这不是一个好主意。
答案 2 :(得分:0)
从变量值中定位变量?如果我理解正确,那么您想访问函数cardvalue0
中的变量myfunction
。
您可以使用eval(card)
访问它,但绝对不建议这样做
function myfunction (card) {
if (eval(card) === false) { //this will work
card = true; //however you cannot change the original value
return card;
}
}
您可以通过使用对象来获得
let cardDict = { "cardvalue0" : false,
"cardvalue1" : false}
function myfunction (card) {
if (cardDict[card] === false) {
cardDict[card] = true;
return cardDict[card];
}
}