gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:07:20 24 4
gpt4 key购买 nike

我有一个生成一些随机数字的函数,在该函数中我调用了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com