Javascript 函数不返回计数器

Javascript 函数不返回计数器,javascript,Javascript,我想创建一个倒计时 const useCountDown=(时间=3)=>{ 让timeleft=时间; const downloadTimer=setInterval(函数(){ 时间限制-=1; 如果(timeleft您的返回timeleft是一个非常奇怪的想法。 如果要显示倒计时演变,请将console.log放在setInterval内: const useCountDown=(时间=3)=> { console.log(时间) 让timeleft=时间 const download

我想创建一个倒计时

const useCountDown=(时间=3)=>{
让timeleft=时间;
const downloadTimer=setInterval(函数(){
时间限制-=1;

如果(timeleft您的
返回timeleft
是一个非常奇怪的想法。
如果要显示倒计时演变,请将console.log放在setInterval内:

const useCountDown=(时间=3)=>
{
console.log(时间)
让timeleft=时间
const downloadTimer=setInterval(()=>
{
控制台清除()
console.log(--timeleft)

如果(timeleft这样做的原因是
setInterval
是一个异步函数,那么使用同步javascript将不起作用

这是一个很好的解决方案,它使用和回调

函数*编号(时间){
for(让timeleft=time;timeleft!==0;timeleft--){
产生时效性;
}
}
函数倒计时(回调,时间=3){
设num=数字(时间);
var interval=setInterval(()=>{
var next=num.next();
if(next.done)clearInterval(interval);
回调(next.value | | 0);
}, 1000);
}
倒计时((val)=>console.log(val),10);
当您调用useCountDown(10)时,它将开始新的代码执行,并为所有变量创建单独的内存

因此,不是返回timeleft变量,而是返回函数并稍后执行该函数

例:

var useCountDown=(时间=3)=>{
让timeleft=时间;
const downloadTimer=setInterval(函数(){
时间限制-=1;
if(timeleft-timeleft;
};
var计数器=使用倒计时(10);
let timeout=setInterval(()=>{
让计数=计数器();
console.log(计数)
如果(计数<1){
清除间隔(超时)
}

},1000);
正如其他人所说,JavaScript中实际上不允许您尝试执行的操作。函数不能随时间返回多个值

它可以返回一个数组,但这看起来不适合您

它可以返回超时值随时间更新的对象:

function countdown(seconds) {
  const timer = { secondsInitial: seconds, secondsRemaining: seconds }
  const interval = setInterval(() => {
    timer.secondsRemaining = timer.secondsRemaining - 1
    if (timer.secondsRemaining === 0) {
      clearInterval(interval)
    }
  }, 1000)

  return timer
}
现在,每当您访问代码中其他地方的
timer.seconds保留时,它将包含倒计时计时器上剩余的秒数

但是,这里有一个限制。我猜您很可能希望在计时器更新时发生一些事情。此设置允许您查看计时器是什么,但不会在该值更改时自动让您执行某些操作。为此,您需要以某种方式提供一个包含所需代码的“回调”执行倒数计时的每一秒

这里有一个处理这方面的简单方法。首先,我们修改倒计时函数以接受回调:

function countdown(seconds, callbackFunction = undefined) {
  const timer = { secondsInitial: seconds, secondsRemaining: seconds }

  // Execute once at the top of the countdown
  if (callbackFunction) {
    callbackFunction(timer.secondsRemaining, timer.secondsInitial)
  }

  const interval = setInterval(() => {
    timer.secondsRemaining = timer.secondsRemaining - 1
    if (callbackFunction) {
      callbackFunction(timer.secondsRemaining, timer.secondsInitial)
    }
    if (timer.secondsRemaining === 0) {
      clearInterval(interval)
    }
  }, 1000)

  return timer
}
假设我们只想记录计时器。然后我们会像这样调用上面的函数:

countdown(
  10,
  (remaining) => {
    if (remaining === 0) {
      console.log("NOW!!!")
    } else {
      console.log(`${remaining}...`)
    }
  }
)

/** Output
10...
9...
8...
7...
6...
5...
4...
3...
2...
1...
NOW!
*/

我想在我的代码中使用函数,比如:
const countdownValue=useCountDown(10)
,在console.log中使用函数(countdownValue)获取倒计时值。可以这样做吗?我在代码中的许多地方都需要这个函数这就是为什么我需要在上面的函数中返回一个值。你能帮忙吗?@询问调用的函数只能返回一个唯一的值(或记录)而且它只发生一次,你不可能有太多的执行加上从一个function@Asking如果你同意回电,我编辑了我的answer@Asking当前位置由于我发现你的问题非常有趣,我在中添加了第二个答案…顺便说一句,生成器功能有点无用,它真的只是为了作秀哈哈