试图理解无法在javascript中改变字符串/数字的概念

时间:2016-02-02 22:12:43

标签: javascript string mutators

在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

我认为这是同一个。我将我的变量作为参数传递给函数。我重新分配了该函数中的值。然后我返回并打印该变量。突变在哪里?

3 个答案:

答案 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.