An Interest In:
Web News this Week
- April 3, 2024
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
10 JavaScript Interview Questions
Note: Every question is followed by Output and a rough Explanation. Scroll at your own risk.
Q1.
var msg = "hello";if (true) { var msg = "welcome";}console.log(msg);// ----let msg2 = "hello";if (true) { let msg2 = "welcome";}console.log(msg2);
Output
welcomehello
Explanation
var
is function scoped, therefore, when msg
is declared inside the if
block, it overrides the msg
in the global scope. This does not happen with let
as it is block scoped.
Q2.
for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 1000);}
Output
55555
Explanation
Since var
is function scoped the i
variable holds the value 5
after the loop ends. The callback function in the setTimeout
gets the same value for every occurrence.
Solution
- Convert
var
tolet
to create a scope for every iteration.
for (let i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 1000);}
- Wrap the
setTimeout
in an anonymous function. Passingi
as a parameter scopes it to the anonymous function and therefore the value is not lost.
for (var i = 0; i < 5; i++) { (function (x) { setTimeout(function () { console.log(x); }, 1000); })(i);}
Q3.
const obj = { ["foo_" + (() => 1)()]: "Hello",};console.log(obj);
Output
{ foo_1: 'Hello' }
Q4.
console.log([1,2,3] + [4,5,6]);
Output
1,2,34,5,6
Explanation
String([1,2,3]);
is "1,2,3"
Hence, "1,2,3" + "4,5,6"
is "1,2,34,5,6"
Q5. What's the order of execution?
console.log('1');setTimeout(() => console.log('2'), 0);Promise.resolve().then(() => console.log('3'));console.log('4');
Output
1432
Explanation
Priority for event loop is: call stack > microtask > macrotask
All the synchronous code is executed first
Therefore, logs 1
, 4
Next, there is a Promise
and a setTimeout
Promise callback is stored in microtask queue
& setTimeout callback is stored in macrotask queue
microtask
has a higher priority over macrotask
. Therefore, it logs 3
followed by 2
Q6.
console.log(typeof typeof 1);
Output
string
Explanation
Evaluate from Right to Left
typeof 1
return numbertypeof 'number'
returns string
Q7.
console.log(Math.max() < Math.min());
Solution
true
Explanation
The default value forMath.max()
is-Infinity
& default value forMath.min()
isInfinity
Hence,-Infinity < Infinity
is true
Q8.
function func() { return foo; foo = 1; function foo() {} var foo = "hello";}console.log(typeof func());
Output
function
Explanation
Due to one round of parsing (hoisting) the code looks like this
function func() { var foo; // hoisted function foo() {} // hoisted return foo; foo = 1; foo = "hello";}console.log(typeof func());
Because of that, the last value available for foo is function
Q9.
console.log(3 > 2 > 1);
Output
false
Explanation
It starts from left to right
so 3 > 2
equals true
true > 1
is equivalent to 1 > 1
which is false
Q10.
function fn() { return this.str;}var str = "global";var obj = { str: "obj",};console.log(fn(), fn.call(obj));
Output
global obj
Explanation
When executing fn()
the value of this
is window
and window.str
is global
.
.call()
assigns this
to obj
and obj.str
is obj
Note: This solution works in non-strict
mode.
Thanks for reading
Follow @codedrops.tech for daily posts.
Instagram Twitter Facebook
Micro-Learning Web Development Javascript MERN stack Javascript
codedrops.tech
Original Link: https://dev.to/318097/10-javascript-interview-questions-3n6c
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To