JavaScript इंटरव्यू कैसे पास करें: एडवांस्ड लेवल के टॉप सवाल
\n\nSenior JavaScript डेवलपर या Node.js इंजीनियर की नौकरी का इंटरव्यू सिर्फ सिंटैक्स की जांच नहीं है। इंटरव्यूअर यह देखना चाहते हैं कि आप भाषा को गहराई से समझते हैं: Event Loop कैसे काम करता है, this का असली कॉन्टेक्स्ट क्या है, और एसिंक्रोनस कोड में "हेलिश" नेस्टिंग से कैसे बचें। इस लेख में हम उन सबसे आम और मुश्किल सवालों को समझेंगे जो एडवांस्ड लेवल पर पूछे जाते हैं। तैयार रहें - सिर्फ जवाब याद न करें, बल्कि मैकेनिज्म को समझें।
1. Event Loop, कॉल स्टैक और माइक्रोटास्क (Microtasks vs Macrotasks)
\n\nNode.js इंटरव्यू में यह सबसे लोकप्रिय टॉपिक है। सवाल होता है: "यह कोड क्या आउटपुट देगा और किस क्रम में?"
\n\nconsole.log('1');\n\nsetTimeout(() => console.log('2'), 0);\n\nPromise.resolve().then(() => console.log('3'));\n\nprocess.nextTick(() => console.log('4'));\n\nconsole.log('5');\n\nसही उत्तर: 1, 5, 4, 3, 2.
\n\nव्याख्या:
\n- \n
- सिंक्रोनस कोड (1, 5) सबसे पहले चलता है। \n
- process.nextTick() — यह सबसे हाई प्रायोरिटी वाली माइक्रोटास्क है। यह मौजूदा ऑपरेशन के तुरंत बाद, लेकिन किसी भी अन्य माइक्रोटास्क (Promise) और मैक्रोटास्क (setTimeout) से पहले चलती है। \n
- Promise.then() — यह भी माइक्रोटास्क है, लेकिन इसकी प्रायोरिटी
nextTickसे कम है। \n - setTimeout(cb, 0) — यह मैक्रोटास्क है। यह तभी चलता है जब कॉल स्टैक और सभी माइक्रोटास्क (सभी
nextTickऔरPromise) पूरी तरह खाली हो जाएं। \n
सही जवाब कैसे दें: समझाएं कि Node.js में Event Loop के फेज़ होते हैं। माइक्रोटास्क (process.nextTick और Promise) फेज़ के बीच प्रोसेस होते हैं। मैक्रोटास्क (setTimeout, setInterval, I/O) फेज़ के अंदर चलते हैं। nextTick एक नॉन-स्टैंडर्ड लेकिन बहुत ज़रूरी क्यू है, जिसे रिकर्सिवली इस्तेमाल करने पर Event Loop ब्लॉक हो सकता है।
2. this का कॉन्टेक्स्ट और उसका "खो जाना"
\n\nसवाल: "JavaScript में this कैसे काम करता है? एक उदाहरण दें जहां this खो जाता है, और इसे कैसे ठीक करें?"
एडवांस्ड लेवल का मतलब है कि आप 4 नियम जानते हैं:
\n- \n
- नई बाइंडिंग (new binding) — जब फंक्शन को
newके साथ कॉल किया जाता है,thisनए बने ऑब्जेक्ट को पॉइंट करता है। \n - एक्सप्लिसिट बाइंडिंग —
call,apply,bind। \n - इम्प्लिसिट बाइंडिंग — जब फंक्शन को ऑब्जेक्ट के मेथड के रूप में कॉल किया जाता है (obj.method())। \n
- डिफ़ॉल्ट बाइंडिंग — ग्लोबल ऑब्जेक्ट (Node.js में
global, ब्राउज़र मेंwindow) या स्ट्रिक्ट मोड मेंundefined। \n
कॉन्टेक्स्ट खोने का उदाहरण:
\nconst user = {\n name: 'Alice',\n greet() {\n console.log(`Hello, ${this.name}`);\n }\n};\n\nconst greetFn = user.greet;\ngreetFn(); // Hello, undefined\n\nक्यों? हमने मेथड को एक वेरिएबल में असाइन कर दिया। अब greetFn() बिना ऑब्जेक्ट (user) के कॉन्टेक्स्ट के कॉल हो रहा है। this ग्लोबल ऑब्जेक्ट (या strict mode में undefined) से बाइंड हो जाता है।
कैसे ठीक करें:
\n- \n
bindका उपयोग करें:const greetFn = user.greet.bind(user);\n- एरो फंक्शन का उपयोग करें (इसका अपना
thisनहीं होता, यह बाहरी लेक्सिकल एनवायरनमेंट से लेता है)। \n call/applyसे कॉल करें:greetFn.call(user)। \n
बोनस सवाल: "अगर user.greet को setTimeout में पास कर दें तो क्या होगा?" — वही कॉन्टेक्स्ट खोने का इफेक्ट। इसे bind या कॉलबैक में एरो फंक्शन से ठीक करें।