Hãy xem ví dụ sau:Hàng đợi sự kiện Javascript có phải là FIFO đơn giản hay không?
function A() { console.log('A'); }
function B() { console.log('B'); }
// and then i setTimeout(fn, 0) both of them
setTimeout(A, 0);
setTimeout(B, 0);
Có guarantied rằng B
sẽ ngay lập tức chạy sau A
?
Trình duyệt có thể thêm một tác vụ khác vào hàng đợi giữa A
và B
không?
lưu ý: không có chức năng nào trong số A
hoặc B
đang thêm bất kỳ tác vụ mới nào vào vòng lặp sự kiện.
var callbacks = [];
// then add a bunch of callbacks ... (none adds events to event queue)
//case 1:
callbacks.forEach(cb => setTimeout(cb,0))
//case 2:
setTimeout(function() {
callbacks.forEach(cb => cb());
},0);
Có bất kỳ sự khác biệt trong thứ tự thực hiện của callbacks trong case 1
vs case 2
?
câu trả lời đơn giản: không có, không có đảm bảo. Bởi vì hàng đợi này được sử dụng bởi rất nhiều thứ khác ngoài JS engine. –
có được sử dụng đồng thời không? và nó có thể là một sự kiện từ 'DOM' được đặt vào hàng đợi trong khi một phần của js đang chạy? (không phải là chủ đề duy nhất của js? và các tập lệnh js chạy dài ngừng đóng băng trình duyệt?) –