我希望变量的值在 0 到 1 之间定期变化。 如果我有一个变量的值为 0 ( counter = 0
(,如何在几秒钟后将其增加 1 (counter = 1
(,然后再过几秒钟将其减小回 0 (counter = 0
(?无休止的循环基本上是我想要的。
我假设这将需要 setTimeout 或 setInterval,但我完全不知道我会怎么做。我对语法非常不熟悉;我是一个新手。有人有任何指示吗?
谢谢!
你可以创建一个无穷无尽的定时循环,通过一个函数在最后通过 setTimeout 调用自身。 见下文。
var count = 0;
function flip() {
count = Number(!count);
console.log(count);
setTimeout(flip, 1000);
}
flip();
一种更通用的方法:
// possible addition: allow user to stop the timer
const rotate = (time, vals) => {
// TODO: handle incorrect vals (non-empty array) or time (positive number)
let idx = 0;
setInterval(() => idx = (idx + 1) % vals.length, time);
return {
get val() {return vals[idx];}
}
}
const toggle = rotate(1000, [0, 1])
toggle.val //=> depends on when you call it, changes every 1000 ms
// but always either 0 or 1.
这样做的一个优点是,它不会将值保留在其他人可以弄乱它的全局范围内,而是将其封装在闭包中。
它更通用,因为您可以轻松更改更新之间的时间,并且可以为值选择所需的任何内容(例如,rotate(5000, ['foo', 'bar', 'baz')
.(
var counter = 0;
var changeCounter = function () {
counter = counter === 0 ? 1 : 0;
console.log('counter', counter);
setTimeout(changeCounter, 1000);
}
changeCounter();
这听起来像家庭作业,但请尝试以下操作:
var value = 0;
setInterval(
function() {
value = value===0 ? 1 : 0;
console.log('value =', value);
},
1000
);
setInterval
将一遍又一遍地调用该函数,而无需一遍又一遍地调用setTimeout
。
setInterval
是你想要的,如W3C中所述,你应该传递一个函数和一个时间间隔(以毫秒为单位(来执行代码的频率。
var counter = 0;
setInterval(function(){
counter = 1 - counter;
//Do what you want with the result...
//alert(counter);
}, 1000);
https://codepen.io/paulodiogo/pen/xPPOKa?editors=1010
不使用全局变量...https://codepen.io/paulodiogo/pen/KyyMXZ