javascript - 将函数内部生成的数组推送到全局变量

标签 javascript

谁能帮我理解为什么我不能用这个函数将数组推送到 generatedNumbers 全局变量:

var totalFrames = document.getElementById("totalFrames").value;
var framesToSkip = document.getElementById("framesToSkip").value;
var generatedNumbers = [];

function clickGenerate() {
  for (var i = 1; i <= totalFrames; i++) {
    if ((i % framesToSkip) === 0) {
      // do nothing
    } else {
      generatedNumbers.push(i);
    }
  }
  document.getElementById("numberList").innerHTML = generatedNumbers;
}

你可以在这里看到它伴随着 html:

https://jsfiddle.net/bdorrance/wszzvpu1/

如果我将变量放在函数中,它可以正常工作,但我需要变量是全局的,以便其他函数可以访问它们。您可以在此处查看该代码:

https://jsfiddle.net/bdorrance/t246rnxe/

最佳答案

您定义了totalFramesframesToSkip 变量之前您在这些输入框中输入任何内容或单击按钮生成。盒子里没有任何东西,所以没有东西可以抓取,也没有东西可以推到阵列上。

在包含变量的 jsfiddle 中,直到单击按钮时才定义变量,此时您已经在框中输入了数字。

您可以通过在函数外部定义变量来使变量成为全局变量,例如var totalFrames, framesToSkip;,然后在您的 onClick 函数中为它们分配输入框的值。

修改后的 JS:

var totalFrames, framesToSkip;

function clickGenerate() {
    totalFrames = document.getElementById("totalFrames").value;
    framesToSkip = document.getElementById("framesToSkip").value;
    var generatedNumbers = [];

    for (var i = 1; i <= totalFrames; i++) {
        if ((i % framesToSkip) === 0) {
            // do nothing
        } else {
            generatedNumbers.push(i);
        }
    }
    document.getElementById("numberList").innerHTML = generatedNumbers;
}

function showFullResult() {
    document.getElementById("numberList").innerHTML = "full test";
}

function showShortResult() {
    document.getElementById("numberList").innerHTML = "short test";
}

Here is an updated example in jsfiddle

关于javascript - 将函数内部生成的数组推送到全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079618/

相关文章:

javascript - 删除类属性末尾的空格

javascript - 未捕获的类型错误 : Cannot read property 'split' of undefined

javascript - 存在格式化数组,但点不会绘制

javascript - 对多维数组进行排序不适用于小数

javascript - Vue 3 动态设置选择表单元素的选定选项

javascript - typescript 错误 : Property 'flat' does not exist on type '[string, unknown][]'

javascript - 实现 PDF.js 查看器示例

javascript - 单引号改为双引号

javascript - 尝试使用 Joomla 模板更改事件以防止 Wordpress 站点中的默认设置

javascript - 图层.删除(图像);无法在 Kinetic.js 中工作