Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
November 20, 2020 04:27 pm GMT

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);
Enter fullscreen mode Exit fullscreen mode

Output

welcomehello
Enter fullscreen mode Exit fullscreen mode

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);}
Enter fullscreen mode Exit fullscreen mode

Output

55555
Enter fullscreen mode Exit fullscreen mode

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 to let to create a scope for every iteration.
for (let i = 0; i < 5; i++) {  setTimeout(function () {    console.log(i);  }, 1000);}
Enter fullscreen mode Exit fullscreen mode
  • Wrap the setTimeout in an anonymous function. Passing i 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);}
Enter fullscreen mode Exit fullscreen mode

Q3.

const obj = {  ["foo_" + (() => 1)()]: "Hello",};console.log(obj);
Enter fullscreen mode Exit fullscreen mode

Output

{ foo_1: 'Hello' }
Enter fullscreen mode Exit fullscreen mode

Q4.

console.log([1,2,3] + [4,5,6]);
Enter fullscreen mode Exit fullscreen mode

Output

1,2,34,5,6
Enter fullscreen mode Exit fullscreen mode

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');
Enter fullscreen mode Exit fullscreen mode

Output

1432
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

Output

string
Enter fullscreen mode Exit fullscreen mode

Explanation

Evaluate from Right to Left

  1. typeof 1 return number
  2. typeof 'number' returns string

Q7.

console.log(Math.max() < Math.min());
Enter fullscreen mode Exit fullscreen mode

Solution

true
Enter fullscreen mode Exit fullscreen mode

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());
Enter fullscreen mode Exit fullscreen mode

Output

function
Enter fullscreen mode Exit fullscreen mode

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());
Enter fullscreen mode Exit fullscreen mode

Because of that, the last value available for foo is function

Q9.

console.log(3 > 2 > 1);
Enter fullscreen mode Exit fullscreen mode

Output

false
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

Output

global obj
Enter fullscreen mode Exit fullscreen mode

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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To