0

在 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

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

4

3 回答 3

2

作为函数参数的基元在 javascript 中按值传递。因此myVarchangeMyVar函数中不是引用originalVar而是新变量,其值为originalVar

于 2016-02-02T22:17:28.973 回答
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,它将传播回来(与对象属性一样)。

于 2016-02-04T07:47:13.687 回答
0

操作员+=重新分配变量。它不会重新分配变量所代表的数字。

假设“originalVar”是一个盒子,里面有一个球。然后调用等于 的值changeMyVar(originalVar)changeMyVar函数,因此是一个装有 1 个球的盒子。该行将1000 个球添加到 myVar 框。它不会将 1 个球的概念变为 1001 个球的概念。所以现在仍然等于 1,但等于 1001。myVaroriginalVarmyVarmyVar += 1000originalVarmyVar

于 2016-02-02T22:56:51.653 回答