بازگشت به درس

در هر ثانیه خروجی بگیرید

اهمیت: 5

یک تابع printNumbers(from, to) بنویسید که هر ثانیه یک عدد را نمایش می‌دهد که از from شروع می‌شود و با to پایان می‌یابد.

دو نوع راه‌حل بسازید.

  1. با استفاده از setInterval.
  2. با استفاده از setTimeout تودرتو.

با استفاده از setInterval:

function printNumbers(from, to) {
  let current = from;

  let timerId = setInterval(function() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }, 1000);
}

// :کاربرد
printNumbers(5, 10);

با استفاده از setTimeout تودرتو:

function printNumbers(from, to) {
  let current = from;

  setTimeout(function go() {
    alert(current);
    if (current < to) {
      setTimeout(go, 1000);
    }
    current++;
  }, 1000);
}

// :کاربرد
printNumbers(5, 10);

در نظر داشته باشید که در هر دو راه‌حل، یک تاخیر اولیه قبل از اولین خروجی وجود دارد. تابع بعد 1000 میلی‌ثانیه از اولین بار فراخوانی می‌شود.

اگر ما بخواهیم که تابع بلافاصله اجرا شود، سپس می‌توانیم یک فراخوانی اضافی در خطی جداگانه اضافه کنیم، مثل اینجا:

function printNumbers(from, to) {
  let current = from;

  function go() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }

  go();
  let timerId = setInterval(go, 1000);
}

printNumbers(5, 10);