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

setTimeout — ครั้งเดียว
setTimeout ทำงานหนึ่งครั้งหลังจากเวลาหน่วง (เป็นเวลาขั้นต่ำ ไม่ใช่เวลาที่แน่นอน)
// setTimeout schedules a one-off callback
console.log("A: start");
setTimeout(function () {
console.log("B: after ~5ms");
}, 5);
console.log("C: scheduled");

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);

ดูความคลาดเคลื่อนที่เกิดขึ้น
ช่วงเวลาจริงอาจแตกต่างกัน งาน ภาระของอุปกรณ์ และลูปเหตุการณ์ทำให้เกิด 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);

การจัดตารางให้ตรงจังหวะ
จัดจังหวะให้ตรงกับเวลา 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);

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

แบบทดสอบการแก้ความคลาดเคลื่อน
ตรวจสอบอย่างรวดเร็ว: การลด drift

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

คำถามที่พบบ่อย
บทเรียน “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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- setTimeout, setInterval และการคลาดเคลื่อนของตัวจับเวลา
- Debounce กับ Throttle — เขียนเอง
- การจับเวลาภาพเคลื่อนไหว — เกริ่นนำด้วยลูปอิงเวลา