Javascript 全局变量被设置为新值

标签 javascript

我对 JavaScript 和编码不太熟悉,我需要一些帮助。

我将一个全局变量( generatedNumbers )设置为等于另一个变量(数字),以便我可以对数组进行一些验证。但是,当我更改数字的值时,我的全局变量 generatedNumbers 也会更改。任何帮助将不胜感激。

var generatedNumbers;

function generateNumbers(numberOfNumbers) {
    'use strict';
    var i;
    generatedNumbers = [];
    for (i = 0; i < numberOfNumbers; i = i + 1) {
        generatedNumbers.push(generateRandomNumber(9).toString());
    }
}

function checkEachValidNumberUsed(userExpression, numbers) {
    'use strict';
    var i, j;
    for (i = 0; i < userExpression.length; i = i + 1) {
        for (j = 0; j < numbers.length; j = j + 1) {
            if (userExpression[i] === numbers[j]) {
                numbers.splice(j, 1);
                window.console.log(generatedNumbers);
            }
        }
    }
    if (numbers.length !== 0) {
        return true;
    }
}

function validateExpression(userExpression) {
    'use strict';
    var numbers, validUserInput;
    numbers = generatedNumbers;
    window.console.log(generatedNumbers);
        if (checkEachValidNumberUsed(userExpression, numbers)) {
            document.getElementById("feedbackText").innerHTML = "Each number must be used exactly once.";
    } else {
        return true;
}

最佳答案

当您使用赋值运算符 = 或将数组(以及所有其他非基本类型)传递给函数时,数组(以及所有其他非基本类型)是按引用传递的,而不是复制的,因此对 numbers(或 numbers 的元素值)将反射(reflect)在 generateNumbers 中。

对于此处的数组,numbers = generatedNumbers.slice(0); 将充分克隆该数组,但请记住,如果数组的内容不是基本类型(例如任何对象)使用 new 关键字创建的数组)将不会被克隆:两个数组将引用相同的对象。

关于Javascript 全局变量被设置为新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34401365/

相关文章:

javascript - SuiteScript 2.0 在提交之前更新自定义行字段

javascript - Vue - 有什么方法可以重用 SLOT?

javascript - 代码完成无法识别来自 OpenLayers js 文件的成员

javascript - 中断包含 AJAX 类型函数的 for 循环

javascript - 如何在数组中附加特定值?

javascript - 如何在另一个已加载的 iframe 之后加载 iframe

javascript - Phaser 中的 Sprite 和装备 Sprite 衣服

javascript - 在添加到下拉列表之前检查重复的名称

javascript - 点击后检查div是否存在,如果存在则将其删除

javascript - 如何使垂直导航默认状态为折叠?