0Pricing
JavaScript Academy · บทเรียน

setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา

กำหนดเวลางานที่ทำครั้งเดียวและงานที่ทำซ้ำด้วย setTimeout/setInterval และเรียนรู้เทคนิคลดการคลาดเคลื่อนของตัวจับเวลาอย่างง่าย

setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

รู้จักตัวจับเวลา

เป้าหมาย: จัดตารางการทำงานอย่างเป็นระเบียบ

  • setTimeout: ทำงานภายหลัง (ครั้งเดียว)
  • setInterval: ทำงานซ้ำ
  • ความคลาดเคลื่อนของเวลา: เหตุใดตัวจับเวลาจึงคลาดเคลื่อน
  • วิธีแก้ความคลาดเคลื่อนอย่างง่าย
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 1

setTimeout — ครั้งเดียว

setTimeout ทำงานหนึ่งครั้งหลังจากเวลาหน่วง (เป็นเวลาขั้นต่ำ ไม่ใช่เวลาที่แน่นอน)

// setTimeout schedules a one-off callback
console.log("A: start");

setTimeout(function () {
  console.log("B: after ~5ms");
}, 5);

console.log("C: scheduled");
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 2

setInterval — ทำซ้ำ

setInterval ทำงานซ้ำโดยอัตโนมัติ ใช้ clearInterval เพื่อหยุด

// setInterval repeats; always clear it
let count = 0;

const id = setInterval(function () {
  count = count + 1;
  console.log("tick", count);

  // Stop after 3 ticks to avoid endless logs
  if (count >= 3) {
    clearInterval(id);
    console.log("stopped");
  }
}, 5);
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 3

ดูความคลาดเคลื่อนที่เกิดขึ้น

ช่วงเวลาจริงอาจแตกต่างกัน งาน ภาระของอุปกรณ์ และลูปเหตุการณ์ทำให้เกิด drift

// Drift demo: expected vs actual timing
const targetMs = 5;
let last = Date.now();
let times = 0;

const driftId = setInterval(function () {
  const now = Date.now();
  const gap = now - last; // actual gap
  last = now;
  times = times + 1;
  console.log("gap~", gap, "ms");

  if (times >= 3) {
    clearInterval(driftId);
    console.log("done");
  }
}, targetMs);
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 4

การจัดตารางให้ตรงจังหวะ

จัดจังหวะให้ตรงกับเวลา expected ที่เลื่อนไปเรื่อย ๆ โดยคำนวณเวลาหน่วงครั้งถัดไปจากเวลานั้น เพื่อป้องกันข้อผิดพลาดสะสม

// Simple drift fix: schedule from the expected time
const step = 5;
let expected = Date.now() + step;
let ticks = 0;

function tick() {
  ticks = ticks + 1;
  const now = Date.now();
  const drift = now - expected; // positive if we are late
  console.log("drift:", drift, "ms");

  // Compute next expected time first
  expected = expected + step;

  // Next delay = time until the next expected timestamp
  const nextDelay = Math.max(0, expected - Date.now());

  if (ticks < 3) {
    setTimeout(tick, nextDelay);
  } else {
    console.log("aligned stop");
  }
}

setTimeout(tick, step);
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 5

เคล็ดลับและรายการตรวจสอบ

เคล็ดลับ:

  • ใช้ clearInterval เสมอเมื่อทำงานเสร็จ
  • เลือกใช้ลูป setTimeout ที่จัดจังหวะให้ตรงเพื่อให้ทำงานเป็นจังหวะสม่ำเสมอ
  • ทำให้ฟังก์ชันเรียกกลับของตัวจับเวลาสั้น เพื่อลด drift
setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 6

แบบทดสอบการแก้ความคลาดเคลื่อน

ตรวจสอบอย่างรวดเร็ว: การลด drift

setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 7

ทบทวน

ทบทวน: ใช้ setTimeout สำหรับงานครั้งเดียว ใช้ setInterval สำหรับการทำซ้ำ (อย่าลืมล้างตัวจับเวลา) และลด drift ด้วยการจัดให้การทำงานครั้งถัดไปตรงกับเวลา expected

setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา — ภาพประกอบ 8

คำถามที่พบบ่อย

บทเรียน “setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา”

กำหนดเวลางานที่ทำครั้งเดียวและงานที่ทำซ้ำด้วย setTimeout/setInterval และเรียนรู้เทคนิคลดการคลาดเคลื่อนของตัวจับเวลาอย่างง่าย คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา
  2. Debounce กับ Throttle — เขียนเอง
  3. การจับเวลาภาพเคลื่อนไหว — เกริ่นนำด้วยลูปอิงเวลา
← กลับไปที่ JavaScript Academy