首页 > 解决方案 > 嵌套函数更新全局变量Javascript

问题描述

我想知道为什么全局变量xy没有从while循环中的函数“移动”更新。谁能解释为什么这不起作用以及我应该如何解决它?

var x = 10;
var y = 7;
var destX = 5;
var destY = 5;

function simulate(x, y) {
    while (x !== destX && y !== destY) {
        move(x, y);
    }
    console.log("arrived")
}

function move(x, y) {
        if (y !== destY) {
            if (destY > y) {
                y = y + 1;
            } else {
                y = y - 1;
            }
        } else {
            if (destX > x) {
                x = x + 1;
            } else {
                x = x - 1;
            }
        }
}

simulate(x, y);

标签: javascriptalgorithmfunction

解决方案


函数的参数也被命名为xand y,因此它们隐藏了全局变量。在这种特殊情况下,您似乎只想使用全局变量,因此您可以简单地从两个函数中删除参数。

var x = 10;
var y = 7;
var destX = 5;
var destY = 5;
function simulate() {
    while (x !== destX && y !== destY) {
        move();
    }
    console.log("arrived")
}
function move() {
        if (x !== destX) {
            if (destY > y) {
                y = y + 1;
            } else {
                y = y - 1;
            }
        } else {
            if (destX > x) {
                x = x + 1;
            } else {
                x = x - 1;
            }
        }
}
simulate();

推荐阅读