【问题标题】:Change variables value inside nested function更改嵌套函数内的变量值
【发布时间】:2020-10-26 18:37:51
【问题描述】:

我有一个循环的函数,在该函数内部我调用了另一个函数(它应该改变“newArray[x]”的值,但它没有做任何事情)。

function UTF8() {
        newArray = ["0011", "0001"]
        newArray.forEach(x => {
            binaryToHexadecimal(newArray[x]);
            console.log(newArray[x])
        });
        console.log(newArray[0])
}

function binaryToHexadecimal(string) {
    if (string === "0000") {
        return string = "0";
    }
    else if (string ==="0001") {
        return string = "1";
    }
    else if (string ==="0010") {
        return string = "2";
    }
    else if (string ==="0011") {
        return string = "3";
    }
    else if (string ==="0100") {
        return string = "4";
    }

}
UTF8();

【问题讨论】:

  • 参数是按值调用的。为参数 never 分配新值会更改您作为参数传递的变量或属性。
  • 1. newArray[x]undefined 因为 x 要么是 0011 要么是 0001 并且两者都是 newArray["0011"]newArray["0001"] 不要存在。 2. 这不是从数组中替换值的方式
  • 1) 你正在使用 forEach,所以 x 不是索引,它是数组元素本身 2) 你必须使用 newArray[x] = binaryToHexadecimal(newArray[x]); 3) 这正是 .map()是为了
  • ["0011", "0001"].map(b => parseInt(b, 2).toString(16).toUpperCase());

标签: javascript function loops


【解决方案1】:

该函数正在设置一个 local 变量,它无法控制用于传递该值的任何变量。

只需从函数中返回您想要的值。例如:

return "0";

然后当调用函数时,根据需要使用该值来设置你的数组元素:

newArray[x] = binaryToHexadecimal(newArray[x]);

【讨论】:

    【解决方案2】:

    使用map 代替forEach

    这里 return string = "0";可以直接返回值。

    function UTF8() {
            newArray = ["0011", "0001"]
            return newArray.map(x => {
                return binaryToHexadecimal(x);
            });
    }
    
    function binaryToHexadecimal(string) {
        if (string === "0000") {
            return "0";
        }
        else if (string ==="0001") {
            return "1";
        }
        else if (string ==="0010") {
            return "2";
        }
        else if (string === "0011") {
            return "3";
        }
        else if (string ==="0100") {
            return string = "4";
        }
    
    }
    const result = UTF8();
      console.log(result);

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 2013-04-02
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2021-05-18
      相关资源
      最近更新 更多