javascript output based interview questions
JavaScript Output Questions — Interview Me Yeh 15 Snippets Aate Hain
JavaScript Output Based Interview Questions — Definitions Se Kaam Nahi Chalega
Bhai sach batao — "closure kya hota hai" ka jawab tumhe yaad hai. Rata hua hai. Lekin interviewer ne screen share karke 4 line ka code dikhaya aur pucha "iska output kya aayega?" — aur dimaag ne kaam karna band kar diya. Yehi asli filter hai.
Zyaadatar Hindi/Hinglish JavaScript interview posts sirf definitions ki list hain. Par actual screening round me output prediction poochha jaata hai, kyunki definition ratna aasan hai aur output batana nahi. Yeh blog wahi gap bharta hai: neeche 15 code snippets hain, har ek ka exact output, aur uske neeche kyun — kyunki interviewer output ke baad hamesha "why" poochta hai, aur wahin log fisalte hain.
Har snippet padho, pehle khud output guess karo, phir answer dekho. Concepts ki full depth ke liye JavaScript chapter pe jao — wahan notes, question bank aur practice sab hai.
1. var Hoisting — Error Nahi Aata, undefined Aata Hai
console.log(a);
var a = 10;
console.log(a);
Output:
undefined
10
Log se pehle a declare hi nahi hui thi — phir error kyun nahi? Kyunki engine code chalane se pehle scope scan karta hai aur var a ko register karke automatically undefined set kar deta hai. Sirf declaration upar uthti hai, assignment apni jagah rehta hai. Isliye pehla log undefined, aur a = 10 chalne ke baad doosra log 10.
2. let Ka TDZ — Yahan Error Aata Hai
console.log(b);
let b = 20;
Output:
ReferenceError: Cannot access 'b' before initialization
Loag samajhte hain let hoist hi nahi hoti. Galat. let aur const bhi hoist hoti hain, par unhe undefined set nahi kiya jaata — woh block ke top se apni declaration line tak Temporal Dead Zone (TDZ) me rehti hain. TDZ me naam exist karta hai par chhoote hi ReferenceError. Yeh farq exactly aise bolna interview me full marks deta hai.
3. Function Declaration vs Arrow — Dono Ek Jaise Nahi Hoiste
sayHi();
function sayHi() {
console.log("hi, main hoist ho gaya");
}
greet();
const greet = () => console.log("hello");
Output:
hi, main hoist ho gaya
ReferenceError: Cannot access 'greet' before initialization
function sayHi() ek declaration hai — poori body ke saath hoist hoti hai, isliye upar se call chal jaata hai. greet sirf ek const variable hai jisme arrow function rakha hai — variable hoist hoti hai par TDZ me, isliye call karte hi ReferenceError. Yaad rakho: declaration hoists the body, expression hoists only the name.
4. IIFE Ke Andar Shadowing
var x = 10;
(function () {
console.log(x);
var x = 20;
console.log(x);
})();
console.log(x);
Output:
undefined
20
10
Pehla log 10 lagta hai, par nahi. Function ke andar var x hai, isliye ek local x us function ke top pe hoist ho jaati hai aur outer x ko poori function me shadow kar deti hai. Us waqt local x = undefined. Assignment ke baad 20. Aur bahar wali x kabhi chhui hi nahi gayi — 10.
5. Closure In A Loop — var vs let
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log("var:", i), 0);
}
for (let j = 0; j < 3; j++) {
setTimeout(() => console.log("let:", j), 0);
}
Output:
var: 3
var: 3
var: 3
let: 0
let: 1
let: 2
Yeh sabse zyada poochha jaane wala JavaScript closure question hai. var function-scoped hai — poore loop me sirf ek hi i banti hai. Teenon callbacks usi ek variable ko pakadte hain, aur jab tak timers chalte hain loop khatam ho chuka hota hai, i ban chuki hai 3. let block-scoped hai — har iteration me nayi binding banti hai, isliye har callback apni copy pakadta hai: 0, 1, 2.
6. this — Method Ko Variable Me Nikalte Hi Toot Jaata Hai
const user = {
city: "Patna",
getCity() {
return this.city;
},
};
console.log(user.getCity());
const fn = user.getCity;
console.log(fn());
Output: (normal non-strict script me)
Patna
undefined
this definition se nahi, call site se decide hota hai. user.getCity() me dot ke left me user hai, to this = user. Par fn() me koi object nahi hai — non-strict mode me this global object ban jaata hai, jispe city nahi hai, isliye undefined. Bonus point ke liye yeh add karo: strict mode ya ES module me this undefined hoga, to fn() seedha TypeError dega. Fix = user.getCity.bind(user).
7. Arrow Function Apna this Nahi Banata
const obj = {
val: 42,
show() {
const arrow = () => this.val;
function plain() {
return this?.val;
}
console.log(arrow());
console.log(plain());
},
};
obj.show();
Output:
42
undefined
Arrow function ka apna this hota hi nahi — woh surrounding scope se this uthata hai. show() ke andar this = obj, to arrow() bhi obj dekhta hai, 42. plain() ek normal function hai jo bina object ke call hua, to uska this global (ya strict me undefined) hai — dono case me this?.val undefined deta hai. Isiliye callbacks ke andar arrow use karte hain.
8. typeof Ke Classic Traps
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof NaN);
console.log(typeof []);
console.log(typeof function () {});
console.log(Array.isArray([]));
console.log(null instanceof Object);
Output:
object
undefined
number
object
function
true
false
typeof null === "object" language ka ek purana bug hai jo backward compatibility ki wajah se aaj tak nahi hataya gaya. typeof NaN === "number" isliye kyunki NaN ka matlab hai "invalid number", hai to number hi. Array bhi object hai — isliye array check karne ke liye Array.isArray() use karo, typeof nahi.
9. == vs === — Coercion Ki Table
console.log(0 == "");
console.log(0 == "0");
console.log("" == "0");
console.log(null == undefined);
console.log(null == 0);
console.log(null >= 0);
console.log(NaN === NaN);
Output:
true
true
false
true
false
true
false
== pehle type badalta hai phir compare karta hai: "" aur "0" dono number me convert hoke 0 aur 0 ban jaate hain, isliye dono 0 ke barabar. Par jab dono strings hain ("" == "0") to koi conversion nahi hoti — false. null sirf undefined ke barabar hai, 0 ke nahi — lekin >= ek relational operator hai jo alag rule follow karta hai aur null ko 0 bana deta hai, isliye null >= 0 true. Aur NaN kisi ke barabar nahi, khud ke bhi nahi. Isliye hamesha === use karo.
10. [] + {} Aur + Ka Dohra Kaam
console.log([] + []);
console.log([] + {});
console.log(1 + "2" + 3);
console.log(1 + 2 + "3");
console.log("5" - 3);
console.log([] == false);
if ([]) console.log("lekin [] truthy hai");
Output:
[object Object]
123
33
2
true
lekin [] truthy hai
(Pehli line khaali hai — [] + [] empty string "" deta hai.)
+ ka double role hai: agar koi bhi operand string ban jaaye to concatenation, warna addition. Objects pehle primitive me convert hote hain — [] ban jaata hai "", {} ban jaata hai "[object Object]". 1 + "2" + 3 left-to-right chalta hai: "12" phir "123". Ulta 1 + 2 + "3" pehle 3 banata hai phir "33". - sirf numeric hai, isliye "5" - 3 = 2.
Aakhri do lines sabse mazedaar hain: [] == false true hai (dono 0 ban jaate hain), par if ([]) ke andar array truthy hai. Loose equality aur truthiness do alag rules hain — yeh interviewer ka favourite follow-up hai.
11. 0.1 + 0.2 Wala Famous Question
console.log(0.1 + 0.2);
console.log(0.1 + 0.2 === 0.3);
console.log((0.1 + 0.2).toFixed(2));
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON);
Output:
0.30000000000000004
false
0.30
true
JavaScript ke saare numbers 64-bit floating point (IEEE 754) hain. 0.1 aur 0.2 ko binary me exactly likha hi nahi ja sakta — bilkul jaise decimal me 1/3 ko exactly nahi likh sakte. Thoda rounding error bachta hai aur sum me dikh jaata hai. Isliye paise/price ka comparison kabhi === se mat karo — ya to toFixed() use karo, ya difference ko Number.EPSILON se compare karo, ya amount ko paise (integer) me store karo.
12. Array Methods — Kaunsa Mutate Karta Hai
const arr = [3, 1, 2];
const sorted = arr.sort();
console.log(arr);
console.log(sorted === arr);
console.log([10, 9, 1].sort());
console.log([10, 9, 1].sort((a, b) => a - b));
const nums = [1, 2, 3];
const doubled = nums.map((n) => n * 2);
console.log(nums);
console.log(doubled);
Output:
[1, 2, 3]
true
[1, 10, 9]
[1, 9, 10]
[1, 2, 3]
[2, 4, 6]
Do alag traps ek saath. Pehla: sort() original array ko hi badal deta hai aur wahi array wapas karta hai — isliye sorted === arr true hai. push, pop, splice, reverse, sort — sab mutate karte hain. map, filter, slice, concat naya array dete hain, original chhoote nahi.
Doosra: sort() bina comparator ke elements ko string maan ke compare karta hai. "1" < "10" < "9" — isliye [10, 9, 1] ban jaata hai [1, 10, 9]. Numbers ke liye comparator (a, b) => a - b dena zaroori hai.
13. Object Reference vs Value, Aur const Ka Matlab
const a = { x: 1 };
const b = a;
b.x = 99;
console.log(a.x);
console.log(a === b);
console.log({ x: 99 } === { x: 99 });
const list = [1, 2];
list.push(3);
console.log(list);
list = [];
Output:
99
true
[1, 2, 3]
TypeError: Assignment to constant variable.
Objects reference se copy hote hain. b = a naya object nahi banata — dono same box ko point karte hain, isliye b.x badalne se a.x bhi badal gaya. Aur do alag objects same content ke saath bhi kabhi === nahi hote, kyunki comparison content ka nahi, address ka hota hai.
const ka matlab "value nahi badlegi" nahi hai — matlab hai binding nahi badlegi. Andar ki property ya array ka content badalna allowed hai, par variable ko naya object assign karna TypeError. Shallow copy ke liye { ...a } ya [...list] use karo.
14. Event Loop — Microtask Hamesha Jeet-ta Hai
console.log("1");
setTimeout(() => console.log("2"), 0);
Promise.resolve().then(() => console.log("3"));
queueMicrotask(() => console.log("4"));
console.log("5");
Output:
1
5
3
4
2
Pehle saara synchronous code chalta hai — 1 aur 5. Phir call stack khaali hote hi event loop poora microtask queue drain karta hai — Promise.then aur queueMicrotask dono microtask hain, jis order me queue hue usi order me chalte hain: 3, 4. Sabse aakhir me ek macrotask — setTimeout ka 2. 0ms likhne se bhi timer promise se pehle nahi chalta, kyunki queue hi alag hai.
15. async/await Ka Exact Order
async function foo() {
console.log("A");
await null;
console.log("B");
}
console.log("start");
foo();
setTimeout(() => console.log("timer"), 0);
Promise.resolve().then(() => console.log("promise"));
console.log("end");
Output:
start
A
end
B
promise
timer
async function synchronously shuru hota hai — foo() call hote hi A turant print ho jaata hai. await par function paused ho jaata hai aur uska baaki hissa (console.log("B")) microtask queue me chala jaata hai — chahe await ke aage promise ho ya null. Isliye end pehle print hota hai. Phir microtasks apne order me: B (jo pehle queue hua tha), phir promise. Timer macrotask hai, sabse last.
Yeh single snippet me hoisting chhod ke poora async model aa jaata hai — isliye yeh screening round ka favourite hai.
Yeh 15 Snippets Yaad Kaise Rakhein
Ratne ki koshish mat karo. In 15 me sirf 6 rules chhupe hain:
| Rule | Kahan lagta hai |
|---|---|
| Declaration hoist hoti hai, value nahi | #1, #2, #3, #4 |
| Closure variable pakadta hai, value nahi | #5 |
this call site se aata hai, arrow parent se |
#6, #7 |
== pehle type badalta hai, truthiness alag rule hai |
#8, #9, #10, #11 |
Objects reference se chalte hain, const sirf binding lock karta hai |
#12, #13 |
| Microtask hamesha macrotask se pehle | #14, #15 |
Rule pakad lo, to interviewer naya snippet dikhaye tab bhi khud output nikal loge — aur wahi asli goal hai.
Ab Practice Karo, Sirf Padho Mat
Padhne aur bolne me farq hai. Interview me tumhe output ke saath "kyunki var function-scoped hai..." ek saans me bolna hota hai. Yeh sirf practice se aata hai.
- Poore concepts, notes aur question bank ke liye: JavaScript chapter — hoisting, closures,
thisbinding, type coercion, event loop, promises, sab alag-alag topics me tode hue hain. - Bol ke practice karne ke liye AI mock interview — voice pe question aata hai, tum jawab bolte ho, instant feedback milta hai ki explanation clear thi ya nahi.
- React ki taiyari saath me chal rahi hai to React interview questions ka 7 din ka plan bhi dekh lo, aur backend side ke liye Node.js interview questions.
Ek chhota sa homework: upar ke 15 me se 5 snippets chuno, ek notebook me sirf code likho, aur kal subah bina dekhe output aur reason likho. Jo galat aaye, wahi tumhara asli kamzor topic hai.
FAQ
Output based JavaScript questions interview me kyun poochte hain?
Kyunki definition ratna aasan hai, output batana nahi. Jab interviewer 4 line ka snippet dikhata hai aur poochta hai 'iska output kya aayega', to woh dekh raha hai ki tumhe hoisting, scope, coercion aur event loop sach me samajh aaye hain ya sirf yaad hain. Yahi wajah hai ki service-based aur startup dono jagah screening round me yeh sabse zyada aate hain.
Var aur let ka sabse common output question kaunsa hai?
For loop ke andar setTimeout wala. var se teenon callbacks 3 print karte hain kyunki var function-scoped hai aur sirf ek hi i banti hai. let se 0, 1, 2 aata hai kyunki har iteration me nayi block-scoped binding banti hai. Yeh single sabse zyada poocha jaane wala JavaScript closure question hai.
Typeof null 'object' kyun deta hai?
Yeh JavaScript ki purani implementation ka bug hai jo language ke bilkul shuruaati din se chala aa raha hai. Ab isse theek nahi kiya jaata kyunki lakhon websites ka code toot jayega — isliye yeh officially ek permanent quirk hai. Interview me isko exactly aise hi bolna hai: legacy bug, backward compatibility ki wajah se abhi tak hai.
Promise.then setTimeout(fn, 0) se pehle kyun chalta hai?
Kyunki dono alag queue me jaate hain. Promise callbacks microtask queue me jaate hain, setTimeout macrotask queue me. Call stack khaali hote hi event loop poora microtask queue drain karta hai, tabhi ek macrotask uthata hai. Isliye 0ms timer bhi promise se haar jaata hai.
0.1 + 0.2 barabar 0.3 kyun nahi hota?
JavaScript ke numbers 64-bit floating point (IEEE 754) hain, aur 0.1 ya 0.2 ko binary me exactly represent nahi kiya ja sakta — jaise decimal me 1/3 ko exactly nahi likh sakte. Isliye result 0.30000000000000004 aata hai. Comparison ke liye toFixed use karo ya difference ko Number.EPSILON se compare karo.
Yeh snippets yaad kaise rakhu interview tak?
Ratne ki koshish mat karo — har snippet ke peeche ka rule yaad rakho. 15 snippets me sirf 6 rules hain: scope aur hoisting, closure kis variable ko pakadta hai, this call-site se aata hai, coercion ke steps, reference vs value, aur microtask-macrotask priority. Rule pakad lo to naye snippet ka output bhi khud nikal loge.