试图理解无法在 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,它将向上传播(与对象属性一样)。
在 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,它将向上传播(与对象属性一样)。