代码之家  ›  专栏  ›  技术社区  ›  Judy

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

  •  0
  • Judy  · 技术社区  · 2 年前

    虽然我知道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();
    
    })()
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   danh    2 年前

    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();
    })()