JavaScript变量定期在两个值之间变化

JavaScript变量定期在两个值之间变化,javascript,variables,timeout,intervals,Javascript,Variables,Timeout,Intervals,我希望变量的值在0和1之间定期变化。如果我有一个值为0的变量(counter=0),我如何在几秒钟后将其增加1(counter=1),然后在几秒钟后将其减少回0(counter=0)?一个无止境的循环基本上就是我想要的 我假设这将需要setTimeout或setInterval,但我完全不知道该怎么做。我对语法很不熟悉;我是个新手。有人有什么建议吗 谢谢 您可以创建一个无休止的定时循环,方法是使用一个函数,该函数在结束时通过setTimeout调用自身。见下文 var counter = 0;

我希望变量的值在0和1之间定期变化。如果我有一个值为0的变量(
counter=0
),我如何在几秒钟后将其增加1(
counter=1
),然后在几秒钟后将其减少回0(
counter=0
)?一个无止境的循环基本上就是我想要的

我假设这将需要setTimeout或setInterval,但我完全不知道该怎么做。我对语法很不熟悉;我是个新手。有人有什么建议吗


谢谢

您可以创建一个无休止的定时循环,方法是使用一个函数,该函数在结束时通过setTimeout调用自身。见下文

var counter = 0;
var changeCounter = function () {
  counter = counter === 0 ? 1 : 0;
  console.log('counter', counter);
  setTimeout(changeCounter, 1000);
}
changeCounter();
var计数=0;
函数翻转(){
计数=数字(!计数);
控制台日志(计数);
设置超时(翻转,1000);
}

翻转()您可以通过在末尾通过setTimeout调用自身的函数来创建一个无止境的定时循环。见下文

var计数=0;
函数翻转(){
计数=数字(!计数);
控制台日志(计数);
设置超时(翻转,1000);
}

翻转()这听起来像是家庭作业,但试一下:

var value = 0;

setInterval(
  function() {
    value = value===0 ? 1 : 0;
    console.log('value =', value);
  },
  1000
);

setInterval
将反复调用函数,而无需反复调用
setTimeout

这听起来像是家庭作业,但请尝试以下操作:

var value = 0;

setInterval(
  function() {
    value = value===0 ? 1 : 0;
    console.log('value =', value);
  },
  1000
);

setInterval
将反复调用函数,而无需反复调用
setTimeout
setInterval
是您想要的,如中所述,您应该传递函数和以毫秒为单位的时间间隔,以执行代码的频率为准

var counter = 0;

setInterval(function(){ 

  counter = 1 - counter;

  //Do what you want with the result...
  //alert(counter);  

}, 1000);

不使用全局变量。。。

setInterval
是您想要的,如中所述,您应该传递函数和时间间隔,以毫秒为单位,以执行代码的频率为单位

var counter = 0;

setInterval(function(){ 

  counter = 1 - counter;

  //Do what you want with the result...
  //alert(counter);  

}, 1000);

不使用全局变量。。。
一种更通用的方法:

// 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')

更通用的方法:

// 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')

像这样吗?这么多答案,没有一个使用最简单的方法…
计数器=1-计数器
-不需要
?:
如果
:p@JaromandaX我现在用=D@PauloDiogo-小偷!!!:p开玩笑:p@JaromandaX这是一个很好的理由!哈哈,像这样的人吗?这么多的答案,没有一个使用最简单的方法…
counter=1-计数器
-不需要
?:
如果
:p@JaromandaX我现在用=D@PauloDiogo-小偷!!!:p开玩笑:p@JaromandaX这是一个很好的理由!哈哈thx人XD