window.requestAnimationFrame ทำเธรดหรือไม่ [ซ้ำ]
ที่ไม่window.requestAnimationFrameฟังก์ชั่นสร้างหัวข้อใหม่จะปล่อยให้ฟังก์ชั่นที่มันเรียกว่าและการทำงานของตัวเองวิ่งขนาน? เพราะฉันไม่เข้าใจว่าทำไมโค้ดต่อไปนี้ไม่ส่งผลให้สแต็กล้น
window.requestAnimationFrameโทรmainและmainโทรwindow.requestAnimationFrameและอื่น ๆ ...
w.rAF-> main-> w.rAF-> ->main w.rAF. .
main.js
function main(currentTime){
window.requestAnimationFrame(main);
console.log(currentTime);
}
window.requestAnimationFrame(main);
index.html
<script src="main.js"></script>
คำตอบ
requestAnimationFrameบอกให้เบราว์เซอร์เรียกใช้ฟังก์ชันก่อนที่จะแสดงเฟรมถัดไป หากคุณเรียกอีกครั้งrequestAnimationFrameใน main จะทำให้ฟังก์ชันนั้นอยู่ในคิวสำหรับ animationFrame ถัดไป (ไม่ใช่ปัจจุบัน)
ใน Javascript จะมีเพียงเธรดคนงานเท่านั้น
requestAnimationFrameเป็นฟังก์ชั่นพิเศษในการรันโค้ดที่จุดเฉพาะใน Event Loop ฉันพบว่าวิดีโอนี้มีประโยชน์มากในการอธิบายวิธีการทำงานของ Event Loop:https://www.youtube.com/watch?v=cCOL7MC4Pl0
ไม่ใช่ฟังก์ชันที่ส่งผ่านไปยังrequestAnimationFrameอยู่ในคิวไม่ใช่เธรด