【问题标题】:trying to understand the concept of being unable to mutate strings/numbers in javascript试图理解无法在 javascript 中改变字符串/数字的概念
【发布时间】:2016-02-02 22:12:43
【问题描述】:

在 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

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

【问题讨论】:

  • 你需要了解事物是如何传递和引用的。

标签: javascript string mutators


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    希望它能解决您的问题:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        相关资源
        最近更新 更多