虽然我知道'全局作用域,函数作用域,块作用域';在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();
})()