javascript - 在 setInterval() 中访问全局变量

标签 javascript jquery

我有一个生成一些随机数字的函数,在该函数中我调用了 setInterval(),因为我需要这些数字每 2 秒刷新一次。

function genSine(val1, val2) {

    var freq = 0.1; // angular frequency

    var coords = function(x, y) {
        var amplitude = Math.floor((Math.random()*10)+1);
        var phase = Math.floor((Math.random()*20)+1);
        return {
            x : Math.sin(freq * (val1 + phase) * amplitude) + Math.floor((Math.random()*100)+1),
            y : Math.sin(freq * (val2 + phase) * amplitude) + Math.floor((Math.random()*100)+1)
        };
    }

    setInterval(function() {
        current = coords(50, 50);
        console.log('Val 1: ' + current.x);
        console.log('Val 2: ' + current.y);
    }, 2000);
}

genSine(10, 20);

一切都很好,值按预期更新,但我的目标是在 setInterval() 函数内更新两个全局变量(我们称它们为 val1/val2)。看来我有一个范围问题,因为这些变量在函数内不可访问,而且我无法从该函数外部访问“当前”变量。我知道我在这里遗漏了什么,那是什么?

fiddle :http://jsfiddle.net/niczak/4uNen/1/

最佳答案

您只需在全局范围内定义 var current = {};,并确保在任何范围内定义 var current其他范围。 current=[whatever]; 没问题,只要没有 var

编辑:我不确定你做了什么,但我用这段代码修复了你的 fiddle :

var current;
function genSine(val1, val2) {

    var freq = 0.1; // angular frequency

   var coords = function(x, y) {
        var amplitude = Math.floor((Math.random()*10)+10);
        var phase = Math.floor((Math.random()*20)+10);
        return {
            x : Math.sin(freq * (val1 + phase) * amplitude) + Math.floor((Math.random()*100)+1),
            y : Math.sin(freq * (val2 + phase) * amplitude) + Math.floor((Math.random()*100)+1)
        };
    }

    setInterval(function() {
        current = coords(50, 50);
        console.log(current);
        $(".display").html(JSON.stringify(current));
    }, 500);
}

genSine(10, 20);

setInterval(function() {
    $(".display2").html("d2:"+JSON.stringify(current));
}, 200);

关于javascript - 在 setInterval() 中访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204476/

相关文章:

javascript - ES6 特性 : How are Template Strings useful?

javascript - 根据属性值在 DOM 中查找元素

jquery - 如何在jquery post函数中指定二进制数据

javascript - 使用ajax获取json数组

javascript - 停止 jQuery "click scroll"重置

javascript - 使用 jeditable 并获取 TypeError : $(. ..).editable 不是函数,该怎么办?

php - 如何动态计算每个月的工作日?

javascript - 在表单中提交时,新的 data-* HTML5/Javascript 值是否可以在 PHP 中访问

Javascript 360度全景

javascript - 如何在点击后延迟js功能