试图理解无法在 javascript 中改变 strings/numbers 的概念

trying to understand the concept of being unable to mutate strings/numbers in javascript

在 Javascript 中,您可以重新分配一个变量,例如:

var x = 10;
x+=10;
console.log(x);
//prints 20 to the console

但是如果我再举一个看似相似的例子 activity 我会得到意想不到的结果:

var originalVar = 1;

changeMyVar(originalVar);

function changeMyVar(myVar) {
  myVar += 1000;
  return myVar;
}

console.log(originalVar);
//prints 1 to the console

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

作为函数参数的原语在javascript中按值传递。因此 changeMyVar 函数中的 myVar 不是对 originalVar 的引用,而是值为 originalVar.

的新变量

运算符+=重新赋值变量。它不会重新分配变量代表的数字。

假设 'originalVar' 是一个盒子,里面有一个球。然后调用 changeMyVar(originalVar) 调用 changeMyVar 函数,其中 myVar 等于 originalVar 的值,因此 myVar 是一个盒子,里面有 1 个球。 myVar += 1000 行将 1000 个球添加到 myVar 框中。它并没有把1个球的概念变成1001个球的概念。所以现在 originalVar 仍然等于 1,但是 myVar 等于 1001。

希望能解决你的问题:

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,它将向上传播(与对象属性一样)。