我正在查看这段 JavaScript 代码:
var a = {i: 0};
var b = 0;
function change(a, b) {
a.i++;
b++;
}
change(a, b);
console.log(a, b);
您希望被记录: {i:1} 1 。它实际上返回: {i:1} 0? 为什么 b=0 而不是 b=1?
最佳答案
因为 b
是 change
内的参数 - 在 change
内,b
引用局部变量,当局部变量被重新赋值时,对外部的b
没有影响。
要么始终将 b
引用为全局变量:
var a = {i: 0};
var b = 0;
function change(a) {
a.i++;
b++;
}
change(a);
console.log(a, b);
或者从change
返回b
,并将外层b
赋值给change
的结果:
var a = {i: 0};
var b = 0;
function change(a, b) {
a.i++;
b++;
return b;
}
b = change(a, b);
console.log(a, b);
(如果需要返回并重新分配多个变量,请返回对象或数组:
var a = {i: 0};
var b = 0;
var c = 0;
function change(a, b, c) {
a.i++;
b++;
c++;
return { b, c };
}
({b, c} = change(a, b, c));
console.log(a, b, c);
)
关于javascript - 为什么这段js代码中的值没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121325/