इस उदाहरण पर एक नज़र डालें:जावास्क्रिप्ट घटना एक साधारण फीफो कतार है या नहीं?
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);
यह guarantied कि B
तुरंत A
बाद चलने लगेंगे है?
क्या यह संभव है कि ब्राउज़र A
और B
के बीच कतार में एक और कार्य जोड़ें?
नोट: A
या B
फ़ंक्शंस में से कोई भी ईवेंट लूप में कोई नया कार्य नहीं जोड़ रहा है।
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);
वहाँ case 1
बनाम case 2
में कॉलबैक के निष्पादन के क्रम में कोई अंतर है?
सरल जवाब: नहीं, कोई गारंटी नहीं है। चूंकि यह कतार जेएस इंजन के अलावा कई चीजों द्वारा उपयोग की जाती है। –
क्या यह समवर्ती रूप से उपयोग किया जाता है? और क्या यह संभव है कि 'डीओएम' से एक घटना कतार में हो, जबकि जेएस का एक हिस्सा चल रहा है? (जेएस सिंगल थ्रेड नहीं है? और लंबे समय तक चलने वाली जेएस स्क्रिप्ट्स फ्रीज ब्राउज़र बंद कर देती हैं?) –