【发布时间】:2019-04-26 16:10:35
【问题描述】:
我的代码:
var a = 23;
var b = a;
a = 46;
console.log(a);
console.log(b);
为什么 b 的值打印为 23 而不是 46?
输出:
a=46, b=23,
【问题讨论】:
-
a和b是不同的变量,被赋予了不同的值。
标签: javascript
我的代码:
var a = 23;
var b = a;
a = 46;
console.log(a);
console.log(b);
为什么 b 的值打印为 23 而不是 46?
输出:
a=46, b=23,
【问题讨论】:
a 和 b 是不同的变量,被赋予了不同的值。
标签: javascript
在 Javascript 中,只有对象/数组通过引用传递,而其他的则通过值传递。由于 a 和 b 保存整数值,它们按值传递。
【讨论】:
当执行var b = a; 时,b 不会“引用”a。此时变成了一个数值为a的数值。
但是,如果您使用对象,则属性将使用a 的引用,而不是其值:
a = { value: 23 };
b = a;
a.value = 46;
console.log(b);
// console
Object { value: 46 }
【讨论】:
看看这个answer。基元通过值传递,对象通过引用传递。由于 a 和 b 是原语,它们是按值传递的。而当 a 发生变化时,它不会反映在 b 中。
【讨论】:
因为您给出的值为 a,即 23。然后您将 a 重新分配为 46。
【讨论】:
在您的代码中,您首先使用 23 的值初始化 a,然后将 a 的值分配给 b
var a = 23;
var b = a;
a = 46;
console.log(a);
console.log(b);
然后您更新 a 的值,但不将其分配给 b
和 Java-Script 一样,只有 Objects/Arrays 是通过引用传递的,其他的都是通过值传递的。由于 a 和 b 持有整数值,因此它们按值传递。
所以更新a 的值不会导致b 值的变化;如果在更新 a 的值后将值分配给 b,则会导致 46 的值同时显示为 a and b
【讨论】:
赋值运算符意味着您将右侧的值分配给左侧的值,因此通过此语句 var b = a; b 变为 23,一旦你改变了 a,由于 js 的词法作用域,它对 b 的值没有影响。
【讨论】: