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

时间:2015-05-06 14:26:11

标签: javascript

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

args, kwargs = (1, 2), {"a":3, "b":4}
Process(target=f, args=args, kwargs=kwargs).start()
# Or
pool = Pool()
args, kwargs = (1, 2), {"a":3, "b":4}
pool.apply_async(f, args, kwargs)

你可以在这里看到html:

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

如果我把变量放在函数中,它工作正常,但我需要变量是全局的,所以它们可以被其他函数访问。你可以在这里看到代码:

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

3 个答案:

答案 0 :(得分:2)

您在之前定义了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

答案 1 :(得分:1)

你的问题不是那个全局数组。 你的问题是你没有收集&#34; totalFrames&#34;的实际价值。和&#34; totalFramesSkip&#34;。 随着函数被调用。变量totalFramesframesToSkip的值为0

您必须在函数调用中收集实际值。 在你的函数中添加这些行:

framesToSkip = document.getElementById("framesToSkip").value;
totalFrames = document.getElementById("totalFrames").value;

然后它应该工作

答案 2 :(得分:-1)

正如其他人所说:在你的函数中移动totalFrames和framesToSkip的变量:

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