【问题标题】:setting hardware configuration bits in hardware using JS [duplicate]使用 JS 在硬件中设置硬件配置位
【发布时间】:2021-05-29 08:34:26
【问题描述】:

我的问题可以简化为这段微不足道(或看起来如此)的代码

var myArray = [1,2];
function addOnetoArrayElement(element){
element +=1;
console.log(element);     // Returns 3
}

addOnetoArrayElement(myArray[1]);
console.log(myArray[1]);  // Returns 2 

我发现可以对数组执行各种操作,例如 map、reduce、push 到数组,但对数组元素的简单算术运算完全没有参考。不要介意所有关于提升、范围、按值传递和引用的东西。我敢肯定,也许有一天我会知道足够多的知识来为这个演讲做出贡献。我必须怎么做才能使 myArray[1] = 3?

【问题讨论】:

    标签: javascript arrays scope hoisting pass-by-reference-value


    【解决方案1】:

    您假设myArray[1] 将被传递给函数,它可以修改myArray 中的元素(所谓的引用)。

    但是myArray[1] 只是一个数字,它是一个原始类型,是按值传递的。这意味着将副本传递给与myArray 没有连接的函数。因此,element 参数的修改不会改变myArray(参见docs)。

    原始参数(如数字)按值传递给函数;值被传递给函数,但如果函数改变了参数的值,这种变化不会在全局或调用函数中反映出来。

    仅供参考,只有 7 个primitive data types in JS:字符串、数字、大整数、布尔值、未定义、符号和空值。

    要解决这个问题,我们需要传递整个myArray 作为第一个参数(通过引用,因为它是一个Array)并将索引作为第二个参数。在这种情况下,myArray 将通过引用传递,函数将能够对其进行修改。

    var myArray = [1,2];
    function addOnetoArrayElement(arr, ind){
      arr[ind] += 1;
      console.log(arr[ind]);     // Returns 3
    }
    
    addOnetoArrayElement(myArray, 1);
    console.log(myArray[1]);  // Returns 3 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2015-07-02
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多