JavaScript 变量定期在两个值之间切换



我希望变量的值在 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

相关内容

  • 没有找到相关文章

最新更新