我正在查看以下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?
答案 0 :(得分:4)
因为b
是change
内的参数-在change
内,b
指的是 local 变量,并且当重新分配局部变量时,这对外部b
无效。
总是将b
称为全局变量:
var a = {i: 0};
var b = 0;
function change(a) {
a.i++;
b++;
}
change(a);
console.log(a, b);
或从b
返回change
,然后将外部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);
)
答案 1 :(得分:1)
您正在函数标头中隐藏变量a
。
function change() {
a.i++;
b++;
}
将起作用。