This is Part 6 of 10, a bonus practice article containing 191 output-based JavaScript interview questions. It includes 111 questions drawn from the React Native Interview Handbook plus 80 additional questions on the JavaScript behavior interviewers commonly test in React Native rounds: hoisting, scope, closures, arrays, objects, functions, coercion, conditions, Promises, and the event loop.
Complete series
This Dev.to series has five core handbook articles plus five focused practice extras. Open the series page to move through the complete reading order:
- Part 1: JavaScript — core handbook, questions 1–120
- Part 2: React — core handbook, questions 121–220
- Part 3: React Native — core handbook, questions 221–420
- Part 4: Performance & Architecture — core handbook, questions 421–560
- Part 5: Senior & System Design — core handbook, questions 561–719
- Part 6: Output-Based JavaScript Practice — bonus practice article
- Part 7: Coding Interview Practice — bonus practice article
- Part 8: Code Output Challenges — bonus practice article
- Part 9: Current React Native Interview Questions — new high-frequency practice article
- Part 10: Project & Production Interviews — senior project ownership and real-production practice
How to use this guide
Before opening an answer, state the exact output first. Then explain the rule that causes it: evaluation order, scope, coercion, reference identity, prototype lookup, or microtask scheduling. Run the snippet only after committing to an answer.
Topics covered
- Hoisting, Temporal Dead Zone,
var,let,const, and function declarations - Scope, closures,
this, arrow functions,call,apply, andbind - Arrays, sparse arrays,
map,reduce,sort,slice,splice, and mutation - Objects, references, shallow copies, prototypes, getters, and property lookup
- Conditions, truthiness, equality, nullish coalescing, and type coercion
- Promises,
async/await, microtasks, timers, and error recovery - React and React Native rendering behavior, state updates, effects, and
FlatList
Interview answer checklist
- State the exact output or thrown error.
- Identify whether the code is synchronous, a microtask, or a timer task.
- Explain whether values are primitives, references, or inherited properties.
- Mention the practical React Native consequence when the snippet involves rendering, effects, or the JavaScript thread.
Output-Based JavaScript Questions
111 reviewed questions.
🟡 Intermediate
1. Array equality compares references?
Code example:Answer
Answer: Exact output: false, then true
Why: Each array literal creates a distinct object; b points to the same object as a.
console.log([] === []);
const a = [];
const b = a;
console.log(a === b);
2. Arrow function and arguments?
Code example:Answer
Answer: Exact output: outer
Why: Arrow functions do not create their own arguments object; they capture the surrounding one.
function outer() {
const arrow = () => console.log(arguments[0]);
arrow('inner');
}
outer('outer');
3. Async function return value?
Code example:Answer
Answer: Exact output: true, then 42
Why: An async function always returns a Promise fulfilled with its returned value.
async function getValue() {
return 42;
}
console.log(getValue() instanceof Promise);
getValue().then(console.log);
4. Basic var hoisting?
Code example:Answer
Answer: Exact output: undefined, then 10
Why: The declaration is hoisted and initialized with undefined; the assignment stays in place.
console.log(a);
var a = 10;
console.log(a);
5. Boolean arithmetic?
Code example:Answer
Answer: Exact output: 2, 1, 0
Why: Numeric conversion maps true to 1 and false to 0.
console.log(true + true);
console.log(true + false);
console.log(Number(false));
6. Chained map and filter order?
Code example:Answer
Answer: Exact output: [6, 8]
Why: map first creates [2, 4, 6, 8], then filter keeps values above 4.
const result = [1, 2, 3, 4]
.map((value) => value * 2)
.filter((value) => value > 4);
console.log(result);
7. Changing key resets state?
Code example:Answer
Answer: Exact output: A changed userId resets Profile's local state
Why: Changing the key makes React treat it as a different component instance.
<Profile key={userId} userId={userId} />;
8. Class Temporal Dead Zone?
Code example:Answer
Answer: Exact output: ReferenceError
Why: Class declarations are not usable before their declaration is evaluated.
const user = new User();
class User {}
9. Closure counter?
Code example:Answer
Answer: Exact output: 1, 2
Why: The returned function retains access to its lexical environment.
function counter() {
let count = 0;
return () => ++count;
}
const next = counter();
console.log(next());
console.log(next());
10. Closure with let in a loop?
Code example:Answer
Answer: Exact output: 0, 1, 2
Why: let creates a new binding for every iteration.
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
11. Closure with var in a loop?
Code example:Answer
Answer: Exact output: 3, 3, 3
Why: All callbacks close over the same function-scoped variable.
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
12. Default parameter scope?
Code example:Answer
Answer: Exact output: ReferenceError
Why: The parameter's own uninitialized binding shadows the outer value in the default-expression scope.
let value = 5;
function show(value = value) {
return value;
}
show();
13. Default sort is lexicographic?
Code example:Answer
Answer: Exact output: [1, 10, 2]
Why: Without a comparator, sort compares string representations.
const values = [10, 2, 1];
values.sort();
console.log(values);
14. Destructuring defaults and holes?
Code example:Answer
Answer: Exact output: 10, null, 30
Why: Defaults apply to undefined or a missing element, but not to null.
const [a = 10, b = 20, c = 30] = [undefined, null];
console.log(a, b, c);
15. Destructuring defaults?
Code example:Answer
Answer: Exact output: null, 20
Why: A default value is used only when the property is undefined.
const { a = 10, b = 20 } = {
a: null,
b: undefined,
};
console.log(a, b);
16. Duplicate function declarations?
Code example:Answer
Answer: Exact output: 2
Why: In the same scope, the later function declaration replaces the earlier declaration.
console.log(getValue());
function getValue() {
return 1;
}
function getValue() {
return 2;
}
17. Effect cleanup order?
Code example:Answer
Answer: Exact output: For 0 to 1: effect 0, cleanup 0, effect 1
Why: React cleans up the previous effect before running the replacement.
useEffect(() => {
console.log('effect', count);
return () => console.log('cleanup', count);
}, [count]);
18. Empty array conversions?
Code example:Answer
Answer: Exact output: empty string, 0, true
Why: An empty array converts to an empty string, which converts to zero for numeric comparison.
console.log(String([]));
console.log(Number([]));
console.log([] == false);
19. Empty dependency stale closure?
Code example:Answer
Answer: Exact output: It repeatedly logs the initial count
Why: The effect callback captures count from the first render.
useEffect(() => {
const id = setInterval(() => console.log(count), 1000);
return () => clearInterval(id);
}, []); // captures the initial count
20. Event loop: Promise vs timer?
Code example:Answer
Answer: Exact output: A, D, C, B
Why: Synchronous code runs first, then microtasks, then timer tasks.
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');
21. FlatList and extraData?
Code example:Answer
Answer: Exact output: Rows may not update when only selectedId changes
Why: FlatList behaves like a PureComponent and may skip work when its relevant props remain shallow-equal.
<FlatList
data={items}
renderItem={({ item }) => (
<Row item={item} selected={selectedId === item.id} />
)}
/>;
22. Function closure after return?
Code example:Answer
Answer: Exact output: 1, then 2
Why: inner retains the lexical environment of the completed outer call.
function outer() {
let value = 1;
return function inner() {
console.log(value++);
};
}
const next = outer();
next();
next();
23. Function declaration and var assignment?
Code example:Answer
Answer: Exact output: function, then number
Why: The function declaration initializes value first; the runtime assignment later replaces it with 10.
console.log(typeof value);
var value = 10;
function value() {}
console.log(typeof value);
24. Function declaration hoisting?
Code example:Answer
Answer: Exact output: Hello
Why: A function declaration is hoisted together with its function body.
sayHello();
function sayHello() {
console.log('Hello');
}
25. Function expression hoisting?
Code example:Answer
Answer: Exact output: TypeError: sayHello is not a function
Why: Only the var declaration is hoisted. Its value is undefined at the call.
sayHello();
var sayHello = function () {
console.log('Hello');
};
26. Function length?
Code example:Answer
Answer: Exact output: 3, 1, 0
Why: Function length counts parameters before the first default and excludes the rest parameter.
function first(a, b, c) {}
function second(a, b = 2, c) {}
function third(...args) {}
console.log(first.length, second.length, third.length);
27. Functional state updates?
Code example:Answer
Answer: Exact output: After one press, count is 3
Why: React applies each updater to the result of the previous queued updater.
setCount((c) => c + 1);
setCount((c) => c + 1);
setCount((c) => c + 1);
28. Getter execution?
Code example:Answer
Answer: Exact output: getter, then React Native
Why: Reading an accessor property executes its getter function.
const user = {
first: 'React',
last: 'Native',
get name() {
console.log('getter');
return `${this.first} ${this.last}`;
},
};
console.log(user.name);
29. Heavy JavaScript work and UI?
Code example:Answer
Answer: Exact output: The app can freeze or drop frames until the loop finishes
Why: Heavy synchronous work blocks the JavaScript thread and delays event handling and React updates.
const press = () => {
const result = expensiveSynchronousLoop();
setResult(result);
};
30. Hoisting with var?
Code example:Answer
Answer: Exact output: undefined
Why: The local declaration is hoisted, but the assignment remains in its original place.
var x = 21;
function test() {
console.log(x);
var x = 20;
}
test();
31. Lazy state initializer?
Code example:Answer
Answer: Exact output: Normally initialize prints only on mount
Why: React calls the initializer to create initial state, not on every ordinary re-render.
const [value] = useState(() => {
console.log('initialize');
return expensiveCalculation();
});
32. Local var shadows outer variable?
Code example:Answer
Answer: Exact output: undefined
Why: The local var is hoisted and shadows the outer count throughout the function.
var count = 10;
function show() {
console.log(count);
var count = 20;
}
show();
33. Logging immediately after setState?
Code example:Answer
Answer: Exact output: The first press logs 0
Why: The handler continues using state from the render that created it.
const [count, setCount] = useState(0);
const press = () => {
setCount(1);
console.log(count);
};
34. Loose vs strict equality?
Code example:Answer
Answer: Exact output: true, false, true, false
Why: Loose equality performs type coercion; strict equality requires matching types.
console.log(0 == false);
console.log(0 === false);
console.log('' == false);
console.log('' === false);
35. Multiple Promise microtasks?
Code example:Answer
Answer: Exact output: start, end, p1, p2
Why: Promise callbacks are queued in registration order after synchronous code.
console.log('start');
Promise.resolve().then(() => console.log('p1'));
Promise.resolve().then(() => console.log('p2'));
console.log('end');
36. Mutating React state?
Code example:Answer
Answer: Exact output: A re-render may be skipped
Why: The setter receives the same object reference, so React can consider the state unchanged.
const [user, setUser] = useState({ name: 'Alex' });
const press = () => {
user.name = 'Sam';
setUser(user);
};
37. NaN equality?
Code example:Answer
Answer: Exact output: false, true, true
Why: NaN is unequal to every value under ===, including itself.
console.log(NaN === NaN);
console.log(Object.is(NaN, NaN));
console.log(Number.isNaN(NaN));
38. Named function expression scope?
Code example:Answer
Answer: Exact output: function, then undefined
Why: The expression's name is available inside its own body, not in the surrounding scope.
const run = function internal() {
console.log(typeof internal);
};
run();
console.log(typeof internal);
39. Nested Promise microtasks?
Code example:Answer
Answer: Exact output: 1, 2, 3
Why: The inner Promise callback is queued before the next chained reaction becomes runnable.
Promise.resolve()
.then(() => {
console.log(1);
Promise.resolve().then(() => console.log(2));
})
.then(() => console.log(3));
40. OR vs nullish coalescing?
Code example:Answer
Answer: Exact output: 100, 0, 100
Why: || falls back for all falsy values; ?? only for null or undefined.
console.log(0 || 100);
console.log(0 ?? 100);
console.log(null ?? 100);
41. Object dependency causes repeated effects?
Code example:Answer
Answer: Exact output: fetch runs after every render
Why: A new options object is created on every render.
const options = { page: 1 };
useEffect(() => {
console.log('fetch');
}, [options]);
42. Object keys are coerced to strings?
Code example:Answer
Answer: Exact output: second
Why: Both object keys become the same string, '[object Object]'.
const store = {};
const first = { id: 1 };
const second = { id: 2 };
store[first] = 'first';
store[second] = 'second';
console.log(store[first]);
43. Object.assign is shallow?
Code example:Answer
Answer: Exact output: true
Why: Object.assign copies the nested reference rather than cloning it.
const source = { settings: { dark: false } };
const copy = Object.assign({}, source);
copy.settings.dark = true;
console.log(source.settings.dark);
44. Object.freeze is shallow?
Code example:Answer
Answer: Exact output: Pune
Why: The outer object is frozen, but the nested address object is not.
const user = Object.freeze({
name: 'Alex',
address: { city: 'Delhi' },
});
user.address.city = 'Pune';
console.log(user.address.city);
45. Optional chaining?
Code example:Answer
Answer: Exact output: undefined, Guest
Why: Optional chaining stops safely at null/undefined; ?? supplies the fallback.
const user = null;
console.log(user?.profile?.name);
console.log(user?.profile?.name ?? 'Guest');
46. Parameter and var with the same name?
Code example:Answer
Answer: Exact output: 10, then 20
Why: The parameter supplies the initial local value; redeclaring it with var does not reset it.
function show(value) {
console.log(value);
var value = 20;
console.log(value);
}
show(10);
47. Promise chain values?
Code example:Answer
Answer: Exact output: 2, 4
Why: Each then receives the value returned by the previous callback.
Promise.resolve(1)
.then((v) => v + 1)
.then((v) => {
console.log(v);
return v * 2;
})
.then(console.log);
48. Promise error recovery?
Code example:Answer
Answer: Exact output: error, recovered
Why: catch handles the rejection and returns a fulfilled value to the next then.
Promise.reject('error')
.catch((value) => {
console.log(value);
return 'recovered';
})
.then(console.log);
49. Promise executor is synchronous?
Code example:Answer
Answer: Exact output: 1, 2, 4, 3
Why: The Promise constructor executes immediately. The then callback is a microtask.
console.log(1);
new Promise((resolve) => {
console.log(2);
resolve();
}).then(() => console.log(3));
console.log(4);
50. Promise.race?
Code example:Answer
Answer: Exact output: fast
Why: race settles with the first input to settle, not the first item in array order.
Promise.race([
new Promise((resolve) => setTimeout(() => resolve('slow'), 20)),
Promise.resolve('fast'),
]).then(console.log);
51. Prototype property lookup?
Code example:Answer
Answer: Exact output: admin, then editor
Why: user has no own role, so lookup follows its prototype reference.
const parent = { role: 'admin' };
const user = Object.create(parent);
user.name = 'Alex';
console.log(user.role);
parent.role = 'editor';
console.log(user.role);
52. React.memo and inline object?
Code example:Answer
Answer: Exact output: Child can log again whenever Parent renders
Why: The inline style is a new object reference, so shallow prop comparison fails.
<View style={style} />;
});
function Parent() {
return <Child style={{ flex: 1 }} />;
}
53. Ref updates?
Code example:Answer
Answer: Exact output: It increases once for each render
Why: A ref persists between renders, but changing current does not cause a render.
const renders = useRef(0);
renders.current += 1;
console.log(renders.current);
54. Regular method vs arrow this?
Code example:Answer
Answer: Exact output: Alex, then usually undefined
Why: A regular method receives the calling object as this. An arrow captures lexical this.
const user = {
name: 'Alex',
regular() {
console.log(this.name);
},
arrow: () => console.log(this.name),
};
user.regular();
user.arrow();
55. Render and effect order?
Code example:Answer
Answer: Exact output: Production: render, effect
Why: The component renders first; the passive effect runs after commit.
<Text>Hello</Text>;
}
56. Repeated direct state updates?
Code example:Answer
Answer: Exact output: After one press, count is 1
Why: All calls calculate the next value from count captured by the current render.
const [count, setCount] = useState(0);
const press = () => {
setCount(count + 1);
setCount(count + 1);
setCount(count + 1);
};
57. Rest parameters?
Code example:Answer
Answer: Exact output: 1, then [2, 3, 4]
Why: The rest parameter collects remaining arguments into a real array.
function inspect(first, ...rest) {
console.log(first);
console.log(rest);
}
inspect(1, 2, 3, 4);
58. ScrollView vs FlatList output behavior?
Code example:Answer
Answer: ScrollView mounts its children eagerly, which is simple and appropriate for bounded content. FlatList virtualizes data-backed rows and is usually the safer baseline when item count or row cost can grow, but it adds tuning and state-preservation considerations. I choose from measured memory, fill rate, interaction cost, and product constraints rather than a fixed item-count rule.
<ScrollView>
{items.map((item) => (
<Row key={item.id} item={item} />
))}
</ScrollView>;
59. Shallow object equality?
Code example:Answer
Answer: Exact output: false, false
Why: Both operators compare object identity, and these are separate objects.
const a = { value: 1 };
const b = { value: 1 };
console.log(a === b);
console.log(Object.is(a, b));
60. Shallow spread copy?
Code example:Answer
Answer: Exact output: Sam
Why: Spread creates a new outer object but shares nested references.
const a = { user: { name: 'Alex' } };
const b = { ...a };
b.user.name = 'Sam';
console.log(a.user.name);
61. Shared object reference?
Code example:Answer
Answer: Exact output: Sam
Why: a and b contain references to the same object.
const a = { name: 'Alex' };
const b = a;
b.name = 'Sam';
console.log(a.name); // 'Sam'
62. Spread creates a shallow array copy?
Code example:Answer
Answer: Exact output: 9
Why: The array container is new, but the nested object reference is shared.
const first = [{ value: 1 }];
const second = [...first];
second[0].value = 9;
console.log(first[0].value);
63. Strict Mode console output?
Code example:Answer
Answer: Exact output: Development may print render twice; production normally once
Why: Strict Mode repeats selected work in development to expose impure rendering and missing cleanup.
<Text>Profile</Text>;
}
64. String addition vs numeric subtraction?
Code example:Answer
Answer: Exact output: 52, 3, 51
Why: The + operator concatenates when a string is involved; subtraction converts operands to numbers.
console.log('5' + 2);
console.log('5' - 2);
console.log(5 + '2' - 1);
65. String plus number coercion?
Code example:Answer
Answer: Exact output: 52, 3, 7
Why: + concatenates when one operand is a string; subtraction performs numeric coercion.
console.log('5' + 2);
console.log('5' - 2);
console.log(Number('5') + 2);
66. Strings are immutable?
Code example:Answer
Answer: Exact output: React
Why: Assigning to a string index does not modify the string value.
let text = 'React';
text[0] = 'X';
console.log(text);
67. Temporal Dead Zone?
Code example:Answer
Answer: Exact output: ReferenceError
Why: let is hoisted but cannot be accessed before its declaration is initialized.
console.log(value);
let value = 10;
68. Throwing inside then?
Code example:Answer
Answer: Exact output: data, caught
Why: An exception in a then callback rejects the Promise returned by that then.
Promise.resolve('data')
.then((value) => {
console.log(value);
throw new Error('broken');
})
.catch(() => console.log('caught'));
69. Timer callback creates a microtask?
Code example:Answer
Answer: Exact output: start, end, timer 1, promise, timer 2
Why: After each timer task, JavaScript drains newly queued microtasks before the next timer task.
console.log('start');
setTimeout(() => {
console.log('timer 1');
Promise.resolve().then(() => console.log('promise'));
}, 0);
setTimeout(() => console.log('timer 2'), 0);
console.log('end');
70. Truthiness of string values?
Code example:Answer
Answer: Exact output: true, true, false, true
Why: Every non-empty string and every object is truthy.
console.log(Boolean('false'));
console.log(Boolean('0'));
console.log(Boolean(''));
console.log(Boolean([]));
71. What is the output of a closure counter called three times?
Code example:Answer
Answer: It prints 1, 2, 3 because every call updates the same closed-over count. Separate calls to outer create independent closure environments.
function outer() {
let count = 0;
return () => console.log(++count);
}
const fn = outer();
fn();
fn();
fn(); // 1 2 3
72. What is the output of synchronous logs, Promise.then, and setTimeout(0)?
Code example:Answer
Answer: The output is 1, 4, 3, 2: synchronous logs run first, then the Promise microtask, then the timer macrotask. The interview-worthy reasoning is to evaluate operands and side effects in source order, then apply the relevant coercion, scope, or scheduling rule before stating the result.
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// 1 4 3 2
73. What is the output of var versus let in a loop with setTimeout?
Code example:Answer
Answer: var produces 3,3,3 because all callbacks share one function-scoped binding after the loop. let produces 0,1,2 because each iteration gets a new binding.
for (var i = 0; i < 3; i++) setTimeout(() => console.log(i)); // 3 3 3
for (let i = 0; i < 3; i++) setTimeout(() => console.log(i)); // 0 1 2
74. What is the output when Promise.then and queueMicrotask are queued before a timer?
Code example:Answer
Answer: It prints A, E, C, D, B. Synchronous logs run first; Promise.then and queueMicrotask then run in enqueue order; the timer runs afterward.
console.log('A');
setTimeout(() => console.log('B'));
Promise.resolve().then(() => console.log('C'));
queueMicrotask(() => console.log('D'));
console.log('E'); // A E C D B
75. What is the output when a property exists only on the prototype?
Code example:Answer
Answer: It prints John because property lookup falls through the instance to Person.prototype. The interview-worthy reasoning is to evaluate operands and side effects in source order, then apply the relevant coercion, scope, or scheduling rule before stating the result.
function Person() {}
Person.prototype.name = 'John';
const p = new Person();
console.log(p.name); // John
76. What is the result of [] + []?
Code example:Answer
Answer: It is an empty string because both arrays convert to empty strings and + performs string concatenation. The interview-worthy reasoning is to evaluate operands and side effects in source order, then apply the relevant coercion, scope, or scheduling rule before stating the result.
[] + []; // ''
77. What is the result of [] == false?
Code example:Answer
Answer: It is true: the array converts to an empty string and then 0, while false converts to 0. The interview-worthy reasoning is to evaluate operands and side effects in source order, then apply the relevant coercion, scope, or scheduling rule before stating the result.
[] == false; // true
78. What is the result of {} + []?
Code example:Answer
Answer: The result is parsing-context dependent: leading {} may be parsed as a block, while parenthesized objects convert to '[object Object]'. Never rely on this ambiguity.
({}) + []; // '[object Object]'
79. async/await ordering?
Code example:Answer
Answer: Exact output: 3, 1, 4, 2
Why: The function runs synchronously until await. Its continuation is a microtask.
async function run() {
console.log(1);
await Promise.resolve();
console.log(2);
}
console.log(3);
run();
console.log(4);
80. await with a non-Promise value?
Code example:Answer
Answer: Exact output: A, C, B
Why: await behaves like awaiting Promise.resolve(10), so continuation is asynchronous.
async function run() {
console.log('A');
await 10;
console.log('B');
}
run();
console.log('C');
81. call, apply and bind?
Code example:Answer
Answer: Exact output: Alex-Delhi, Alex-Pune, Alex-Noida
Why: call invokes with separate arguments, apply invokes with an array-like list, and bind returns a function.
function intro(city) {
return `${this.name}-${city}`;
}
const user = { name: 'Alex' };
console.log(intro.call(user, 'Delhi'));
console.log(intro.apply(user, ['Pune']));
console.log(intro.bind(user, 'Noida')());
82. catch recovers a Promise chain?
Code example:Answer
Answer: Exact output: failed, recovered
Why: Returning from catch fulfills the next Promise.
Promise.reject('failed')
.catch((error) => {
console.log(error);
return 'recovered';
})
.then(console.log);
83. const before declaration?
Code example:Answer
Answer: Exact output: ReferenceError
Why: const also remains in the Temporal Dead Zone until its declaration executes.
console.log(apiUrl);
const apiUrl = 'example.com';
84. const object mutation?
Code example:Answer
Answer: Exact output: Sam
Why: const prevents rebinding, not mutation of the referenced object.
const user = { name: 'Alex' };
user.name = 'Sam';
console.log(user.name);
85. delete leaves an array hole?
Code example:Answer
Answer: Exact output: 3, then false
Why: delete removes the indexed property but does not shift elements or change length.
const values = [10, 20, 30];
delete values[1];
console.log(values.length);
console.log(1 in values);
86. delete reveals a prototype value?
Code example:Answer
Answer: Exact output: 2, then 1
Why: Deleting the own property exposes the inherited property during the next lookup.
const parent = { value: 1 };
const child = Object.create(parent);
child.value = 2;
console.log(child.value);
delete child.value;
console.log(child.value);
87. fill shares object references?
Code example:Answer
Answer: Exact output: [5, 5, 5]
Why: fill inserts the same object reference into every position.
const rows = Array(3).fill({ count: 0 });
rows[0].count = 5;
console.log(rows.map((row) => row.count));
88. filter(Boolean)?
Code example:Answer
Answer: Exact output: [1, 'RN']
Why: Boolean removes all falsy values, not only null and undefined.
const values = [0, 1, '', 'RN', null, undefined, false];
console.log(values.filter(Boolean));
89. finally does not replace a value?
Code example:Answer
Answer: Exact output: data
Why: A normal return from finally does not replace the settled value.
Promise.resolve('data')
.finally(() => 'other')
.then(console.log);
90. forEach return value?
Code example:Answer
Answer: Exact output: undefined
Why: forEach is for side effects and always returns undefined.
const result = [1, 2, 3].forEach((value) => value * 2);
console.log(result);
91. in vs own property?
Code example:Answer
Answer: Exact output: true, then false
Why: in checks the prototype chain; Object.hasOwn checks only the object itself.
const parent = { role: 'admin' };
const user = Object.create(parent);
user.name = 'Alex';
console.log('role' in user);
console.log(Object.hasOwn(user, 'role'));
92. includes handles NaN?
Code example:Answer
Answer: Exact output: -1, true
Why: indexOf uses strict-equality-like comparison; includes uses SameValueZero, which matches NaN.
const values = [1, NaN, 3];
console.log(values.indexOf(NaN));
console.log(values.includes(NaN));
93. let before declaration?
Code example:Answer
Answer: Exact output: ReferenceError
Why: let is hoisted but remains uninitialized in the Temporal Dead Zone.
console.log(a);
let a = 10;
94. let function expression?
Code example:Answer
Answer: Exact output: ReferenceError
Why: The let binding exists but is still in the Temporal Dead Zone.
greet();
let greet = function () {
console.log('Hello');
};
95. let is block-scoped?
Code example:Answer
Answer: Exact output: ReferenceError
Why: The let binding exists only inside the if block.
function test() {
if (true) {
let message = 'inside';
}
console.log(message);
}
test();
96. map callback without return?
Code example:Answer
Answer: Exact output: [undefined, undefined, undefined]
Why: A block-bodied arrow function needs an explicit return.
const result = [1, 2, 3].map((value) => {
value * 2;
});
console.log(result);
97. map with an async callback?
Code example:Answer
Answer: Exact output: true
Why: An async callback always returns a Promise, so map creates an array of Promises.
const results = [1, 2, 3].map(async (value) => value * 2);
console.log(results[0] instanceof Promise);
98. map with parseInt?
Code example:Answer
Answer: Exact output: [1, NaN, NaN]
Why: map supplies value, index and array. parseInt treats the index as its radix.
console.log(['1', '2', '3'].map(parseInt));
99. null and undefined arithmetic?
Code example:Answer
Answer: Exact output: 1, NaN, 0, NaN
Why: Numeric conversion turns null into 0 and undefined into NaN.
console.log(null + 1);
console.log(undefined + 1);
console.log(Number(null));
console.log(Number(undefined));
100. null compared with undefined?
Code example:Answer
Answer: Exact output: true, false
Why: Loose equality has a special rule making null equal to undefined; strict equality distinguishes them.
console.log(null == undefined);
console.log(null === undefined);
101. push return value?
Code example:Answer
Answer: Exact output: 4, then [1, 2, 3, 4]
Why: push mutates the array and returns its new length.
const values = [1, 2, 3];
const result = values.push(4);
console.log(result);
console.log(values);
102. reduce without an initial value?
Code example:Answer
Answer: Exact output: 6
Why: The first element becomes the initial accumulator and iteration starts at index 1.
const values = [1, 2, 3];
const total = values.reduce((sum, value) => sum + value);
console.log(total);
103. replace changes only the first string match?
Code example:Answer
Answer: Exact output: RN JS JS, then RN RN RN
Why: A string search in replace affects only the first occurrence; replaceAll affects all.
const text = 'JS JS JS';
console.log(text.replace('JS', 'RN'));
console.log(text.replaceAll('JS', 'RN'));
104. slice vs splice?
Code example:Answer
Answer: Exact output: [2, 3], [1, 2, 3, 4], [2, 3], [1, 4]
Why: slice returns a non-mutating copy; splice removes/replaces elements in the original.
const values = [1, 2, 3, 4];
console.log(values.slice(1, 3));
console.log(values);
console.log(values.splice(1, 2));
console.log(values);
105. slice with negative indexes?
Code example:Answer
Answer: Exact output: Script, then JavaScript
Why: slice counts negative indexes from the end; substring treats negative values as zero.
const text = 'JavaScript';
console.log(text.slice(-6));
console.log(text.substring(-6));
106. typeof null?
Code example:Answer
Answer: Exact output: 'object'
Why: This is a historical JavaScript language quirk.
console.log(typeof null); // 'object'
107. useCallback reference stability?
Code example:Answer
Answer: Exact output: The function reference stays stable until count changes
Why: useCallback returns the same function while dependencies are equal.
const onPress = useCallback(() => {
console.log(count);
}, [count]);
108. useMemo dependencies?
Code example:Answer
Answer: Exact output: calculate runs on mount and when the items reference changes
Why: useMemo reuses its cached value while dependencies remain equal by Object.is.
const total = useMemo(() => {
console.log('calculate');
return items.reduce((sum, x) => sum + x.price, 0);
}, [items]);
109. var function expression?
Code example:Answer
Answer: Exact output: undefined, then TypeError
Why: The variable exists as undefined, but the function assignment has not executed.
console.log(typeof greet);
greet();
var greet = function () {
console.log('Hello');
};
110. var is function-scoped?
Code example:Answer
Answer: Exact output: inside
Why: var does not create an if-block scope.
function test() {
if (true) {
var message = 'inside';
}
console.log(message);
}
test();
111. var vs let in loop?
Code example:Answer
Answer: Exact output: var prints 3, 3, 3; let prints 0, 1, 2.
Why: var shares one function-scoped binding; let creates a binding per iteration.
for (var i = 0; i < 3; i++) setTimeout(() => console.log(i)); // 3 3 3
for (let i = 0; i < 3; i++) setTimeout(() => console.log(i)); // 0 1 2
Extended output-based practice
The following 80 additional questions add deeper practice in the categories most commonly tested in JavaScript and React Native interviews.
Hoisting and scope
🟡 Intermediate
112. var shadows an outer variable?
Code example:Answer
Answer: Exact output: undefined
var x = 1;
function f() {
console.log(x);
var x = 2;
}
f();
113. let before initialization?
Code example:Answer
Answer: Exact output: ReferenceError
function f() {
console.log(x);
let x = 2;
}
f();
114. Function declaration beats var initialization?
Code example:Answer
Answer: Exact output: function
console.log(typeof f);
var f = 1;
function f() {}
115. Function expression before assignment?
Code example:Answer
Answer: Exact output: undefined, then TypeError
console.log(typeof f);
f();
var f = () => 1;
116. typeof inside the Temporal Dead Zone?
Code example:Answer
Answer: Exact output: ReferenceError
{
console.log(typeof x);
let x = 1;
}
117. var escapes a block?
Code example:Answer
Answer: Exact output: inside
if (true) {
var x = 'inside';
}
console.log(x);
118. let stays inside a block?
Code example:Answer
Answer: Exact output: ReferenceError
if (true) {
let x = 'inside';
}
console.log(x);
119. A parameter and var share one binding?
Code example:Answer
Answer: Exact output: 1, then 2
function f(x) {
console.log(x);
var x = 2;
console.log(x);
}
f(1);
120. A default parameter shadows the outer name?
Code example:Answer
Answer: Exact output: ReferenceError
let x = 1;
function f(x = x) {
return x;
}
f();
121. A class is in the Temporal Dead Zone?
Code example:Answer
Answer: Exact output: ReferenceError
new User();
class User {}
122. const also has a Temporal Dead Zone?
Code example:Answer
Answer: Exact output: ReferenceError
console.log(x);
const x = 1;
123. A named function expression is local?
Code example:Answer
Answer: Exact output: function, then undefined
const f = function inner() {
console.log(typeof inner);
};
f();
console.log(typeof inner);
124. var loop callbacks share one binding?
Code example:Answer
Answer: Exact output: 3, 3, 3
for (var i = 0; i < 3; i++) setTimeout(() => console.log(i), 0);
125. let loop callbacks have per-iteration bindings?
Code example:Answer
Answer: Exact output: 0, 1, 2
for (let i = 0; i < 3; i++) setTimeout(() => console.log(i), 0);
126. Assignment before var declaration is local?
Code example:Answer
Answer: Exact output: undefined, then local
var x = 'outer';
function f() {
console.log(x);
x = 'local';
var x;
}
f();
127. A function declaration is callable early?
Code example:Answer
Answer: Exact output: ok
f();
function f() {
console.log('ok');
}
128. A block let can shadow a parameter?
Code example:Answer
Answer: Exact output: 2, then 1
function f(x) {
if (true) {
let x = 2;
console.log(x);
}
console.log(x);
}
f(1);
129. A catch binding is block-scoped?
Code example:Answer
Answer: Exact output: caught, then undefined
try {
throw 'caught';
} catch (e) {
console.log(e);
}
console.log(typeof e);
130. for initializer scope does not leak?
Code example:Answer
Answer: Exact output: undefined
for (let i = 0; i < 1; i++) {}
console.log(typeof i);
131. A var declaration does not reset a value?
Code example:Answer
Answer: Exact output: 5
var x = 5;
var x;
console.log(x);
Arrays and conditions
🟡 Intermediate
132. Sparse array map preserves holes?
Code example:Answer
Answer: Exact output: 3, false
const a = [1, , 3];
const b = a.map((x) => x * 2);
console.log(b.length, 1 in b);
133. Array.fill shares object references?
Code example:Answer
Answer: Exact output: [1, 1]
const a = Array(2).fill({ n: 0 });
a[0].n = 1;
console.log(a.map((x) => x.n));
134. Default sort is lexicographic?
Code example:Answer
Answer: Exact output: [1, 10, 2]
console.log([10, 2, 1].sort());
135. slice does not mutate?
Code example:Answer
Answer: Exact output: [2, 3], [1, 2, 3]
const a = [1, 2, 3];
console.log(a.slice(1), a);
136. splice mutates the source?
Code example:Answer
Answer: Exact output: [2], [1, 3]
const a = [1, 2, 3];
console.log(a.splice(1, 1), a);
137. delete creates an array hole?
Code example:Answer
Answer: Exact output: 3, false
const a = [1, 2, 3];
delete a[1];
console.log(a.length, 1 in a);
138. map(parseInt) receives an index radix?
Code example:Answer
Answer: Exact output: [1, NaN, NaN]
console.log(['1', '2', '3'].map(parseInt));
139. filter(Boolean) removes every falsy value?
Code example:Answer
Answer: Exact output: [1, "x"]
console.log([0, 1, '', false, 'x', null].filter(Boolean));
140. reduce without an initial value starts at index one?
Code example:Answer
Answer: Exact output: 6
console.log([1, 2, 3].reduce((a, b) => a + b));
141. forEach returns undefined?
Code example:Answer
Answer: Exact output: undefined
console.log([1, 2].forEach((x) => x * 2));
142. An array comparison checks references?
Code example:Answer
Answer: Exact output: false
console.log([1, 2] === [1, 2]);
143. Spread creates a shallow array copy?
Code example:Answer
Answer: Exact output: 9
const a = [{ n: 1 }],
b = [...a];
b[0].n = 9;
console.log(a[0].n);
144. includes can match NaN?
Code example:Answer
Answer: Exact output: -1, true
const a = [NaN];
console.log(a.indexOf(NaN), a.includes(NaN));
145. Empty arrays are truthy?
Code example:Answer
Answer: Exact output: true
console.log(Boolean([]));
146. An empty array loosely equals false?
Code example:Answer
Answer: Exact output: true
console.log([] == false);
147. || and ?? treat zero differently?
Code example:Answer
Answer: Exact output: 10, 0
console.log(0 || 10, 0 ?? 10);
148. Ternary checks truthiness?
Code example:Answer
Answer: Exact output: no
console.log([] ? 'yes' : 'no');
149. Array destructuring defaults skip only undefined?
Code example:Answer
Answer: Exact output: 1, null
const [a = 1, b = 2] = [undefined, null];
console.log(a, b);
150. push returns a length?
Code example:Answer
Answer: Exact output: 3, [1, 2, 3]
const a = [1, 2];
console.log(a.push(3), a);
151. flat removes requested nesting?
Code example:Answer
Answer: Exact output: [1, 2, [3]]
console.log([1, [2, [3]]].flat(1));
Objects and references
🟡 Intermediate
152. Two object literals are different references?
Code example:Answer
Answer: Exact output: false
console.log({ a: 1 } === { a: 1 });
153. Assignment shares an object reference?
Code example:Answer
Answer: Exact output: Sam
const a = { n: 'Alex' },
b = a;
b.n = 'Sam';
console.log(a.n);
154. Object spread is shallow?
Code example:Answer
Answer: Exact output: true
const a = { x: { n: 1 } },
b = { ...a };
b.x.n = 2;
console.log(a.x.n === 2);
155. Object.assign is shallow?
Code example:Answer
Answer: Exact output: 2
const a = { x: { n: 1 } },
b = Object.assign({}, a);
b.x.n = 2;
console.log(a.x.n);
156. Object.freeze is shallow?
Code example:Answer
Answer: Exact output: 2
const a = Object.freeze({ x: { n: 1 } });
a.x.n = 2;
console.log(a.x.n);
157. Object keys coerce to strings?
Code example:Answer
Answer: Exact output: second
const o = {},
a = {},
b = {};
o[a] = 'first';
o[b] = 'second';
console.log(o[a]);
158. A prototype supplies a missing property?
Code example:Answer
Answer: Exact output: admin
const p = { r: 'admin' },
u = Object.create(p);
console.log(u.r);
159. Deleting an own property reveals a prototype value?
Code example:Answer
Answer: Exact output: 2, then 1
const p = { x: 1 },
o = Object.create(p);
o.x = 2;
console.log(o.x);
delete o.x;
console.log(o.x);
160. in includes inherited properties?
Code example:Answer
Answer: Exact output: true, false
const p = { x: 1 },
o = Object.create(p);
console.log('x' in o, Object.hasOwn(o, 'x'));
161. A getter runs when read?
Code example:Answer
Answer: Exact output: get, then 2
const o = {
get x() {
console.log('get');
return 2;
},
};
console.log(o.x);
162. const prevents rebinding, not mutation?
Code example:Answer
Answer: Exact output: 2
const o = { x: 1 };
o.x = 2;
console.log(o.x);
163. Nested destructuring reads a reference?
Code example:Answer
Answer: Exact output: 2
const a = { x: { n: 1 } },
b = { x: a.x };
b.x.n = 2;
console.log(a.x.n);
164. Computed keys use evaluated values?
Code example:Answer
Answer: Exact output: ok
const k = 'name',
o = { [k]: 'ok' };
console.log(o.name);
165. Optional chaining stops on nullish values?
Code example:Answer
Answer: Exact output: undefined
const o = null;
console.log(o?.x?.y);
166. Nullish coalescing preserves an empty string?
Code example:Answer
Answer: Exact output: empty
console.log(('' ?? 'fallback') || 'empty');
167. A Map keeps object keys distinct?
Code example:Answer
Answer: Exact output: first, second
const a = {},
b = {},
m = new Map([
[a, 'first'],
[b, 'second'],
]);
console.log(m.get(a), m.get(b));
168. JSON cloning drops undefined?
Code example:Answer
Answer: Exact output: false
const a = { x: undefined },
b = JSON.parse(JSON.stringify(a));
console.log('x' in b);
169. Property lookup sees later prototype changes?
Code example:Answer
Answer: Exact output: 2
const p = { x: 1 },
o = Object.create(p);
p.x = 2;
console.log(o.x);
170. Destructuring copies a primitive value?
Code example:Answer
Answer: Exact output: 1
const o = { x: 1 };
const { x } = o;
o.x = 2;
console.log(x);
171. A symbol key is not returned by Object.keys?
Code example:Answer
Answer: Exact output: 0, 1
const s = Symbol(),
o = { [s]: 1 };
console.log(Object.keys(o).length, Reflect.ownKeys(o).length);
Functions, closures, and this
🟡 Intermediate
172. A closure retains its local value?
Code example:Answer
Answer: Exact output: 1, 2
function f() {
let n = 0;
return () => ++n;
}
const g = f();
console.log(g(), g());
173. Separate closures do not share state?
Code example:Answer
Answer: Exact output: 1, 1
function f() {
let n = 0;
return () => ++n;
}
console.log(f()(), f()());
174. An arrow captures outer arguments?
Code example:Answer
Answer: Exact output: outer
function f() {
(() => console.log(arguments[0]))('inner');
}
f('outer');
175. A regular method receives the caller as this?
Code example:Answer
Answer: Exact output: Alex
const o = {
n: 'Alex',
f() {
console.log(this.n);
},
};
o.f();
176. An extracted regular method loses its receiver?
Code example:Answer
Answer: Exact output: undefined in strict mode
'use strict';
const o = {
n: 'Alex',
f() {
console.log(this?.n);
},
};
const f = o.f;
f();
177. bind fixes a receiver?
Code example:Answer
Answer: Exact output: Alex
function f() {
console.log(this.n);
}
f.bind({ n: 'Alex' })();
178. call supplies arguments individually?
Code example:Answer
Answer: Exact output: Alex-Pune
function f(c) {
console.log(this.n + '-' + c);
}
f.call({ n: 'Alex' }, 'Pune');
179. apply accepts an argument array?
Code example:Answer
Answer: Exact output: Alex-Delhi
function f(c) {
console.log(this.n + '-' + c);
}
f.apply({ n: 'Alex' }, ['Delhi']);
180. An arrow cannot be rebound with call?
Code example:Answer
Answer: Exact output: outer
const n = 'outer';
const f = () => console.log(n);
f.call({ n: 'inner' });
181. A function length stops at the first default?
Code example:Answer
Answer: Exact output: 1
function f(a, b = 1, c) {}
console.log(f.length);
182. Rest parameters form an array?
Code example:Answer
Answer: Exact output: true
function f(...x) {
console.log(Array.isArray(x));
}
f(1, 2);
183. A default parameter is evaluated at call time?
Code example:Answer
Answer: Exact output: 2
let x = 1;
function f(a = x) {
console.log(a);
}
x = 2;
f();
184. this in a timer callback is not the object?
Code example:Answer
Answer: Exact output: undefined in strict mode
'use strict';
const o = {
x: 1,
f() {
setTimeout(function () {
console.log(this?.x);
}, 0);
},
};
o.f();
185. An arrow timer keeps lexical this?
Code example:Answer
Answer: Exact output: 1
const o = {
x: 1,
f() {
setTimeout(() => console.log(this.x), 0);
},
};
o.f();
186. once can cache a function result?
Code example:Answer
Answer: Exact output: 1, 1
let n = 0;
const once = (f) => {
let d, v;
return () => (d ? v : ((d = 1), (v = f())));
};
const f = once(() => ++n);
console.log(f(), f());
187. A callback sees the variable, not its old value?
Code example:Answer
Answer: Exact output: 2
let x = 1;
const f = () => console.log(x);
x = 2;
f();
188. An IIFE creates a private scope?
Code example:Answer
Answer: Exact output: 1, undefined
const x = (() => {
let y = 1;
return y;
})();
console.log(x, typeof y);
189. A constructor call creates a new receiver?
Code example:Answer
Answer: Exact output: Alex
function User(n) {
this.n = n;
}
console.log(new User('Alex').n);
190. Returning an object from a constructor replaces this?
Code example:Answer
Answer: Exact output: override
function F() {
this.x = 'this';
return { x: 'override' };
}
console.log(new F().x);
191. A recursive named function expression can call itself?
Code example:Answer
Answer: Exact output: 3
const f = function inner(n) {
return n ? 1 + inner(n - 1) : 0;
};
console.log(f(3));
Continue practising
For architecture, native modules, performance, system design, and behavioral preparation, continue with the Complete React Native Interview Handbook 2026 series on Dev.to.
Top comments (0)