繁体   English   中英

在国际象棋挑战中,常量变量仍在重新分配

[英]Const variable still being reassigned in chess challenge

我正在尝试对代码战争进行挑战,但我似乎无法弄清楚为什么要更改 const 变量。 我认为这是使用这样的常量的地方。 我只想将块位置重置为调用 checkDiagonal() 时的位置,但它始终保持在第一个 while 循环完成后的位置。

功能检查对角线(件){

const store = piece;
var current = piece;

// northwest
while(current[0] && current[1] > 0){
  current[0] -= 1;
  current[1] -= 1;
  if(spaceCheck(current)){
    return true;
  }
  if(spaceCheck(current) == "break"){
    break;
  }
}

current = store;
console.log("piece1: " + piece + " current :" + current + "store: " + store);

//northeast
while(current[0] > 0 && current[1] < 7){
  current[0] -= 1;
  current[1] += 1;
  if(spaceCheck(current)){
    return true;
  }
  if(spaceCheck(current) == "break"){
    break;
  }
}

current = store;
console.log("piece2: " + piece + " current :" + current + "store: " + store);


//southwest
while(current[0] < 7 && current[1] > 0){
  current[0] += 1;
  current[1] -= 1;
  if(spaceCheck(current)){
    return true;
  }
  if(spaceCheck(current) == "break"){
    break;
  }
}

current = store;
console.log("piece3: " + piece + " current :" + current + "store: " + store);


//southeast
while(current[0] && current[1] < 7){
  current[0] += 1;
  current[1] += 1;
  if(spaceCheck(current)){
    return true;
  }
  if(spaceCheck(current) == "break"){

    break;
  }
}

return false;

};

功能空间检查(位置){

  if(chessboard[location[0]][location[1]] == '♔'){
    console.log("Check detected " + location); 
    return true;      
  }
  if(chessboard[location[0]][location[1]] != ' '){
    console.log("Piece blocking check" + location);
    return "break";      
  }
  else{
    console.log("False" + location);
    return false;
  }

};

/// 加粗的部分让我知道,我怎样才能“重置部分”回到函数调用时的状态?

件 1: 3,0 当前 :3,0store: 3,0

错误 2,1

错误 2,1

错误 1,2

错误 1,2

错误 0,3

错误 0,3

件2:0,3 当前:0,3商店:0,3

错误 1,2

错误 1,2

错误 2,1

错误 2,1

件阻塞检查3,0

由皇后检查(Diag)

错误 2,0

错误 2,0

错误 1,0

错误 1,0

假 0,0

假 0,0

错误 1,0

错误 1,0

错误 2,0

错误 2,0

件阻塞检查3,0

由皇后检查(线性)

你的问题是范围。 基本上,您是在函数内部声明 const,因此 const 仅在该特定函数调用期间存在,并且一旦调用完成,变量将被销毁(这就是您也无法在函数外部访问它的原因)。

因此,当您第二次调用 checkDiagonal 函数时,const 将从头开始重新声明。

这里有一个解释: https : //wsvincent.com/javascript-scope-closures/

希望这是有道理的。

编辑:经过一些挖掘后发现问题似乎是那一块是一个对象,因此是通过引用而不是通过值传递的。 这意味着当 current 更新时,它有点更新了所有三个(从技术上讲,所有三个都是内存中的同一个对象)

这里有一篇关于这两个的好文章: https : //hackernoon.com/grasp-by-value-and-by-reference-in-javascript-7ed75efa1293

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM