[英]Javascript how is the const variable being reassigned in this problem?
[英]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.