在两个函数JavaScript中更新全局变量



虽然我知道'全局作用域,函数作用域,块作用域';在JavaScript。我被这个代码块卡住了。

我将代码的逻辑简化如下。我期望的是,执行函数中的console.log(a, b, c)应该是a = 3 b = 6 c = 9。但实际上我得到的是a = 0 b = 0 c = 0。出了什么问题,如何解决这个问题?由于

(function() {
    let a,b,c;
    let conditions = [-1, 1, 2, 3 ];
    const execute = () => {
        for (let i=0; i<conditions.length; i++) {
            if (conditions[i] < 0) {
                a = 0;
                b = 0;
                c = 0;
            } else if (conditions[i] > 0) {
                update(a, b, c);
            }
        }
        console.log(a,b,c);
    }
    const update = (a, b, c) => {
        a = a + 1;
        b = b + 2;
        c = c + 3;
    }
    execute();
})()

在这里,通过不向update()声明参数,赋值是对父作用域中的变量进行的。

(function() {
    let a,b,c;
    let conditions = [-1, 1, 2, 3 ];
    const execute = () => {
        for (let i=0; i<conditions.length; i++) {
            if (conditions[i] < 0) {
                a = 0;
                b = 0;
                c = 0;
            } else if (conditions[i] > 0) {
                update(); // edit
            }
        }
        console.log(a,b,c);
    }
    const update = () => {
        a = a + 1;
        b = b + 2;
        c = c + 3;
    }
    execute();
})()

最新更新