gpt4 book ai didi

javascript - 为什么for循环执行无限次

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:20 25 4
gpt4 key购买 nike

 window.TicTacToet.compMove = function (row, col) {
var player = window.TicTacToet.PlayerTurn;
var board = window.TicTacToet.Board;
for (i = 0; i < window.TicTacToet.Board.length; i++) {
for (j = 0; j < window.TicTacToet.Board[i].length; j++) {
if (window.TicTacToet.Board[i][j] == null) {
getWin(row, col, player, board);
} else {
console.log("position occupied");
}
}
}
}

function getWin($r, $c, $player, $board) {
checkTop($r, $c, $player, $board);
}

function checkTop($x, $y, $player, b) {
console.log("ENTER");
var success = false;
for (i = 0; i < 3; i++) {
$x--;
if ($x < 0) {
return success;
}
if (b[$y][$x] != $player) {
return success;
}
}
success = true;
return success;
}

函数 check-Top 正在执行无限次。参数 row 和 col 是表格的坐标。 Player 将返回 true 或 false,棋盘是一个包含 9 个元素的数组。 window.TicTacToet.Board.length 和 window.TicTacToet.Board[i].length 的值都是 9 ,即 9 x 9 。console.log("ENTER") 应该执行 91 次,但它正在执行无限次。什么可能成为这个的原因。因此所有其他功能都无法正常工作,游戏本身无法播放。请帮忙。这是用于 9 x 9 可点击棋盘绘图游戏。

最佳答案

我猜你可能想对变量 i 使用 var 关键字,因为您在两个 for 循环中使用相同的变量名 i 。因此,在第二个 for 循环中,您无意中覆盖了第一个 for 循环的 i。为避免这种情况,您可以使用 var 关键字声明变量,该关键字定义了变量范围

改变

  for(i=0;i<window.TicTacToet.Board.length;i++)

  for(var i=0;i<window.TicTacToet.Board.length;i++)


和改变

  for (i=0;i<3;i++) 

  for (var i=0;i<3;i++)



JavaScript 具有函数级作用域。当您在函数内声明变量时,它们只能在该函数内访问。下面的代码解释了变量作用域在 JavaScript 中的工作原理:

没有 var 关键字。

i = 100;
function foo(){
i = 0; // overwriting i to 0
}
foo();
alert(i); // shows 0

使用 var 关键字。

var i = 100;
function foo(){
var i = 0; // This defines a new variable 'i' in the scope of function foo(){}.
}
foo();
alert(i); // shows 100

使用 var 关键字(在嵌套函数中)

var i = 100;
function foo(){
var i = 200; // A new variable 'i' in the scope of function foo(){}.
function bar(){
var i = 0;// A new variable 'i' in the scope of function bar(){}.
}
bar();
alert(i); // shows 200
}
foo();
alert(i); //shows 100

在大多数具有 block 级变量作用域的语言中,变量在被大括号({和})包围的 block 内是可访问的。但是 JavaSciprt 不会在 block 的末尾终止作用域,而是在函数的末尾终止作用域。

我敢肯定有很多关于它的文章和文档。我在谷歌上搜索了一下,发现了一篇有趣的介绍性文章。 http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/

希望这对您有所帮助。

关于javascript - 为什么for循环执行无限次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com