来自变量值的目标变量

时间:2018-06-21 16:24:02

标签: javascript

我试图从已从函数参数传递的变量值中确定变量的目标。我不知道该怎么做。附言顶部的变量也被其他函数使用

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>

3 个答案:

答案 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>

然后,您没有在函数范围内声明新变量,而是直接更改对象上的键值。这通常比可变变量模式要好。

"Variable" variables in Javascript?

答案 1 :(得分:0)

更简单的方法是在Map或对象中移动原始变量(cardvalue0cardvalue1),因此您可以:

cards = {
  cardvalue0 : false,
  cardvalue1 : false
}

function foo(cardName) {
  cards[cardName] = !cards[cardName];
  return cards[cardName]
  }
}

如果您无法移动cardvalue0cardvalue1,则可以对它们进行硬编码,但是它很快就会变得难看。

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];
  }
}