Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么for循环执行无限次 window.TicTacToet.compMove=函数(行、列){ var player=window.TicTacToet.PlayerTurn; var板=window.TicTacToet.board; 对于(i=0;i_Javascript_Html - Fatal编程技术网

Javascript 为什么for循环执行无限次 window.TicTacToet.compMove=函数(行、列){ var player=window.TicTacToet.PlayerTurn; var板=window.TicTacToet.board; 对于(i=0;i

Javascript 为什么for循环执行无限次 window.TicTacToet.compMove=函数(行、列){ var player=window.TicTacToet.PlayerTurn; var板=window.TicTacToet.board; 对于(i=0;i,javascript,html,Javascript,Html,函数检查Top正在执行无限次。参数行和列是表格的坐标。玩家将返回true或false,棋盘是一个包含9个元素的数组。window.TicTacToet.Board.length和window.TicTacToet.Board[i].length的值均为9,即9 x 9。console.log(“ENTER”)应执行91次,但执行次数无限。原因可能是什么。正因为如此,所有其他功能都不能正常工作,游戏本身不能玩。请帮助。这是9 x 9可点击的棋盘游戏。我想你可能想用var关键字表示变量I, 因为在两

函数检查Top正在执行无限次。参数行和列是表格的坐标。玩家将返回true或false,棋盘是一个包含9个元素的数组。window.TicTacToet.Board.length和window.TicTacToet.Board[i].length的值均为9,即9 x 9。console.log(“ENTER”)应执行91次,但执行次数无限。原因可能是什么。正因为如此,所有其他功能都不能正常工作,游戏本身不能玩。请帮助。这是9 x 9可点击的棋盘游戏。

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

改变

 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;
 }
带有
var
关键字。

  for (var i=0;i<3;i++)
i = 100;
function foo(){
    i = 0; // overwriting i to 0
}
foo();
alert(i); // shows 0
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 = 0; // This defines a new variable 'i' in the scope of function foo(){}.
}
foo();
alert(i); // shows 100
在大多数具有块级变量作用域的语言中,可以通过用花括号({和})包围的块访问变量。但是JavaSciprt不会在块的末尾终止作用域,而是在函数的末尾终止它们

我相信有很多关于它的文章和文件。我在谷歌上搜索了一下,发现了一篇有趣的介绍性文章。


希望这能有所帮助。

请同时提供html代码,这样就容易了。
i = 100;
function foo(){
    i = 0; // overwriting i to 0
}
foo();
alert(i); // shows 0
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 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