Javascript 如果函数不起作用,就让它在内部运行。(没有错误消息)

Javascript 如果函数不起作用,就让它在内部运行。(没有错误消息),javascript,Javascript,我在做蛇游戏。 我遇到的问题是,如果蛇进入与食物相同的位置,食物会重新进入不同的位置 不,我在网上的任何地方都找不到这个错误 function draw (){ if(snakeX == food.x && snakeY == food.y){ score++; eat.play(); let food = { x : Math.floor(Math.random()*17+1) * box,

我在做蛇游戏。 我遇到的问题是,如果蛇进入与食物相同的位置,食物会重新进入不同的位置

不,我在网上的任何地方都找不到这个错误

function draw (){

    if(snakeX == food.x && snakeY == food.y){
        score++;
        eat.play();
        let food = {
            x : Math.floor(Math.random()*17+1) * box,
            y : Math.floor(Math.random()*15+3) * box
        }
它应该在分数上加一分,发出声音,替换食物

现在它正在添加一个点并发出声音。

您需要删除,因为您创建了一个新的局部变量,其作用域仅在块中。外部变量保持相同的值而不更改为新值

if (snakeX == food.x && snakeY == food.y) {
    score++;
    eat.play();
    food = {                                         // without let
        x: Math.floor(Math.random() * 17 + 1) * box,
        y: Math.floor(Math.random() * 15 + 3) * box
    };
}
请看一下这个例子:

x获取一个具有自己值的新局部作用域。外部变量x保持不变

设x={a:42}; 如果是真的{ 设x={b:0}; console.logx;//b。。。 } console.logx;//a…您需要删除,因为您创建的新局部变量的作用域仅在块中。外部变量保持相同的值而不更改为新值

if (snakeX == food.x && snakeY == food.y) {
    score++;
    eat.play();
    food = {                                         // without let
        x: Math.floor(Math.random() * 17 + 1) * box,
        y: Math.floor(Math.random() * 15 + 3) * box
    };
}
请看一下这个例子:

x获取一个具有自己值的新局部作用域。外部变量x保持不变

设x={a:42}; 如果是真的{ 设x={b:0}; console.logx;//b。。。 }
console.logx;//a…只是OP的一个补充。正如你在代码中看到的,food.x和food.y已经被使用了。这种menas食品已经被定义。如果你使用let food,你将创建一个名为same的新变量,而不是更新现有变量。这只是一个逻辑错误,最痛苦的错误。只是对OP的补充。正如您在代码中看到的,food.x和food.y已经被使用了。这种menas食品已经被定义。如果你使用let food,你将创建一个名为same的新变量,而不是更新现有变量。这只是一个逻辑错误,最痛苦的错误。