在Javascript中,您可以重新分配一个变量,如:
var x = 10;
x+=10;
console.log(x);
//prints 20 to the console
但如果我再看一个看似相似的活动的例子,我会得到意想不到的结果:
var originalVar = 1;
changeMyVar(originalVar);
function changeMyVar(myVar) {
myVar += 1000;
return myVar;
}
console.log(originalVar);
//prints 1 to the console
我认为这是同一个。我将我的变量作为参数传递给函数。我重新分配了该函数中的值。然后我返回并打印该变量。突变在哪里?
答案 0 :(得分:2)
作为函数参数的基元在javascript中通过值传递。因此,myVar
函数中的changeMyVar
不是originalVar
的引用,而是originalVar
的新变量。
答案 1 :(得分:1)
我希望它能解决您的问题:
<强> According to your question
强>
代码:
var originalVar = 1;
changeMyVar(originalVar);
function changeMyVar(myVar) {
myVar += 1000;
return myVar;
}
console.log(originalVar);
输出
1
//将1打印到控制台
说明:
如果它是纯粹的参考传递,那么一切都会改变。 originalVar
将是1001。
实际上,这意味着如果您更改参数本身(与originalVar一样),则不会影响输入参数的项目。但是,如果更改参数的INTERNALS,它将向上传播(与对象属性一样)。
答案 2 :(得分:0)
运算符+=
重新分配变量。它不会重新分配变量所代表的数字。
让我们说'originalVar&#39;是一个装有一个球的盒子。然后调用changeMyVar(originalVar)
调用changeMyVar
函数,myVar
等于originalVar
的值,因此myVar
是一个包含1个球的框。第myVar += 1000
行在myVar框中添加了1000个球。它没有将1球的概念改变为1001球的概念。所以现在originalVar
仍然等于1,但myVar
等于1001.