变量复制错误的内容js

时间:2018-10-23 15:09:17

标签: javascript function variables

这是所有的js代码,当我在控制台中记录原始变量时,它返回经过改组的平台,我不明白,我是js的新手,我已经尝试过了。但是我真的不知道它是如何工作的,而且,如果你们不介意我问的话,var和let有什么区别?谢谢。

function drawDeck(){
  var deck = []
  var value = [2,3,4,5,6,7,8,9,10,10,10,10,11]
  for(var i=0;i<4;i++){
    for (var j=0;j<13;j++){
      deck.push(value[j])
    }
  }
  return deck
}

function shuffleDeck(deck){
  var currentPos = deck.length, tempPos , randPos
  while (currentPos != 0){
    randPos = Math.floor(Math.random() * currentPos)
    currentPos -= 1
    tempPos = deck[currentPos]
    deck[currentPos] = deck[randPos]
    deck[randPos] = tempPos
  }
  return deck
}

function drawCard(deck){
  var card = deck.shift()
  return card
}
var raw = drawDeck()
var deck = shuffleDeck(raw)
var card = drawCard(deck)
console.log(raw)

1 个答案:

答案 0 :(得分:1)

随机播放功能对输入元素本身进行操作。由于您将原始输入到随机播放功能中,因此它自身会被修改,因此您在登录时会获得随机播放的牌组。是否退回都没关系。

如果要保留原始数组,请将数组克隆到shuffle函数内的新变量中,然后在克隆上进行改组并返回。

var raw = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
var shuffled;

function shuffleDeck(deck) {
  var currentPos = deck.length,
    tempPos, randPos
    var tempDeck = Array.from(deck);
  while (currentPos != 0) {
    randPos = Math.floor(Math.random() * currentPos)
    currentPos -= 1
    tempPos = tempDeck[currentPos]
    tempDeck[currentPos] = tempDeck[randPos]
    tempDeck[randPos] = tempPos
  }
  return tempDeck
}
shuffled = shuffleDeck(raw);
alert('original: ' + raw);
alert('shuffled: ' + shuffled);