【问题标题】:Why is the value of b printed as 23 and not 46?为什么 b 的值打印为 23 而不是 46?
【发布时间】:2019-04-26 16:10:35
【问题描述】:

我的代码:

var a = 23;
var b = a;
a = 46;
console.log(a);
console.log(b);

为什么 b 的值打印为 23 而不是 46?

输出:

a=46, b=23,

【问题讨论】:

标签: javascript


【解决方案1】:

在 Javascript 中,只有对象/数组通过引用传递,而其他的则通过值传递。由于 a 和 b 保存整数值,它们按值传递。

【讨论】:

    【解决方案2】:

    当执行var b = a; 时,b 不会“引用”a。此时变成了一个数值为a的数值。


    但是,如果您使用对象,则属性将使用a引用,而不是其值:

    a = { value: 23 };
    b = a;
    a.value = 46;
    
    console.log(b);
    
    // console
    Object { value: 46 }
    

    【讨论】:

      【解决方案3】:

      看看这个answer。基元通过值传递,对象通过引用传递。由于 a 和 b 是原语,它们是按值传递的。而当 a 发生变化时,它不会反映在 b 中。

      【讨论】:

        【解决方案4】:

        因为您给出的值为 a,即 23。然后您将 a 重新分配为 46。

        【讨论】:

          【解决方案5】:

          在您的代码中,您首先使用 23 的值初始化 a,然后将 a 的值分配给 b

                 var a = 23;
                 var b = a;
                  a = 46;
               console.log(a);
               console.log(b);
          

          然后您更新 a 的值,但不将其分配给 b

          Java-Script 一样,只有 Objects/Arrays 是通过引用传递的,其他的都是通过值传递的。由于 ab 持有整数值,因此它们按值传递。

          所以更新a 的值不会导致b 值的变化;如果在更新 a 的值后将值分配给 b,则会导致 46 的值同时显示为 a and b

          【讨论】:

            【解决方案6】:

            赋值运算符意味着您将右侧的值分配给左侧的值,因此通过此语句 var b = a; b 变为 23,一旦你改变了 a,由于 js 的词法作用域,它对 b 的值没有影响。

            【讨论】:

              猜你喜欢
              • 2021-03-15
              • 1970-01-01
              • 2016-10-17
              • 1970-01-01
              • 2017-08-29
              • 1970-01-01
              • 2021-09-26
              • 2013-09-23
              • 2014-03-23
              相关资源
              最近更新 更多