JavaScript中函数内数组对象访问及蛇梯棋snake_pos调用求助
解决JavaScript蛇梯棋中访问函数内部变量的问题
嘿,作为刚接触JavaScript的新手,遇到作用域问题太正常啦!我来帮你理清这个问题~
首先,你遇到的核心问题是函数内部的局部变量无法被外部直接访问:你在snake函数里用var snake_pos声明了变量,这个变量属于snake函数的局部作用域,函数外面的代码根本“看不到”它,所以你直接在最后写console.log(snake_pos)会报错说变量未定义。
解决方案:让函数返回内部变量
最规范的做法是让snake函数把内部的snake_pos数组返回出来,这样外部调用函数就能拿到这个变量,进而访问它的start_pos和end_pos属性。
修改后的完整代码示例
var player_pos = 4; var dice_value = Math.floor(Math.random() * 6) + 1; function dice() { player_pos = player_pos + dice_value; // 移动后检查是否踩到蛇 player_pos = checkSnake(player_pos); } function game_rule() { if (player_pos >= last_pos) { alert("won the game"); } } function snake() { var snake_pos = [ { start_pos: 11, end_pos: 4 }, { start_pos: 20, end_pos: 7 }, { start_pos: 24, end_pos: 3 } ]; // 返回蛇的位置数组,让外部能访问 return snake_pos; } // 新增:检查玩家是否踩到蛇的函数 function checkSnake(currentPos) { // 调用snake函数拿到蛇的位置数组 var allSnakes = snake(); // 遍历所有蛇的位置 for (var i = 0; i < allSnakes.length; i++) { var currentSnake = allSnakes[i]; // 如果玩家当前位置等于蛇的起点,就滑到终点 if (currentPos === currentSnake.start_pos) { console.log(`倒霉!踩到蛇了,从${currentSnake.start_pos}滑到${currentSnake.end_pos}`); return currentSnake.end_pos; } } // 没踩到蛇就返回原位置 return currentPos; } var last_pos = 25; dice(); game_rule(); // 现在可以正常访问蛇的位置了 var allSnakes = snake(); console.log("第一条蛇的起点:", allSnakes[0].start_pos); // 输出11 console.log("第一条蛇的终点:", allSnakes[0].end_pos); // 输出4 console.log("玩家当前位置:", player_pos); console.log("骰子点数:", dice_value);
额外说明
- 我还给你补充了
checkSnake函数,让玩家移动后自动检查是否踩到蛇,这才符合蛇梯棋的核心逻辑~ - 尽量避免把
snake_pos放到全局作用域(比如直接在函数外面声明),因为全局变量容易引发命名冲突,不利于代码维护。
内容的提问来源于stack exchange,提问作者Sonam
相关产品推荐
相关产品推荐

