JavaScript interview questions along with explanations in Bangla

1. JavaScript āĻ•āĻŋ āϧāϰāύ⧇āϰ āĻ­āĻžāώāĻž?

āωāĻ¤ā§āϤāϰ: JavaScript āĻāĻ•āϟāĻŋ scripting āĻ­āĻžāώāĻž, āϝāĻž āĻŽā§‚āϞāϤ client-side āĻ“āϝāĻŧ⧇āĻŦ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ interpreted language āϝāĻžāϰ āĻŽāĻžāύ⧇ āĻāϟāĻŋ āϏāϰāĻžāϏāϰāĻŋ browser āĻ run āĻšāϝāĻŧ, āϕ⧋āύ⧋ compilation āĻ›āĻžāĻĄāĻŧāĻžāχāĨ¤

2. Variable decl…


This content originally appeared on DEV Community and was authored by Muhammad Ranju

1. JavaScript āĻ•āĻŋ āϧāϰāύ⧇āϰ āĻ­āĻžāώāĻž?

āωāĻ¤ā§āϤāϰ: JavaScript āĻāĻ•āϟāĻŋ scripting āĻ­āĻžāώāĻž, āϝāĻž āĻŽā§‚āϞāϤ client-side āĻ“āϝāĻŧ⧇āĻŦ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ interpreted language āϝāĻžāϰ āĻŽāĻžāύ⧇ āĻāϟāĻŋ āϏāϰāĻžāϏāϰāĻŋ browser āĻ run āĻšāϝāĻŧ, āϕ⧋āύ⧋ compilation āĻ›āĻžāĻĄāĻŧāĻžāχāĨ¤

2. Variable declaration āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ var, let, āĻāĻŦāĻ‚ const āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • var: āĻāϟāĻŋ function-scoped, āĻŽāĻžāύ⧇ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāĨ¤
  • let: āĻāϟāĻŋ block-scoped, āĻŽāĻžāύ⧇ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ {} āĻŦā§āϞāϕ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻĨāĻžāϕ⧇āĨ¤
  • const: āĻāϟāĻŋ block-scoped, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϰ āĻŽāĻžāύ āĻāĻ•āĻŦāĻžāϰ āϏ⧇āϟ āĻ•āϰāĻžāϰ āĻĒāϰ āφāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤

3. Closures āϕ⧀ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Closure āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āϤāĻžāϰ āĻŦāĻžāĻšāĻŋāϰ⧇āϰ scope āĻāϰ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞāϗ⧁āϞ⧋āϕ⧇ āĻŽāύ⧇ āϰāĻžāϖ⧇āĨ¤ Closure āĻāϰ āĻ•āĻžāϰāϪ⧇ inner function āϤāĻžāϰ parent function āĻāϰ variable access āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function outerFunction() {
  let outerVar = 'Hello';
  function innerFunction() {
    console.log(outerVar);
  }
  return innerFunction;
}

const closure = outerFunction();
closure(); // Output: Hello

4. Hoisting āϕ⧀?

āωāĻ¤ā§āϤāϰ: Hoisting āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āϝ⧇āĻ–āĻžāύ⧇ JavaScript variable declaration āĻāĻŦāĻ‚ function declaration āϕ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ¸ā§āϕ⧋āĻĒ⧇āϰ āωāĻĒāϰ⧇āϰ āĻĻāĻŋāϕ⧇ āύāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ initialization āϟāĻž āĻĒāϰ⧇ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

console.log(x); // Output: undefined
var x = 10;

āĻāĻ–āĻžāύ⧇, x āĻĒā§āϰāĻĨāĻŽā§‡ undefinedāĻšāĻŋāϏ⧇āĻŦ⧇ hoistāĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

5. Callback Function āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:
Callback āĻĢāĻžāĻ‚āĻļāύ āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āĻ…āĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ argument āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϏ⧇āχ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻāĻ• āϏāĻŽāϝāĻŧ⧇ call āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function greet(name, callback) {
  console.log('Hello ' + name);
  callback();
}

function sayGoodbye() {
  console.log('Goodbye!');
}

greet('Alice', sayGoodbye); // Output: Hello Alice, Goodbye!

6. Asynchronous JavaScript āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Asynchronous JavaScript āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āϝ⧇āĻ–āĻžāύ⧇ āĻ•āĻŋāϛ⧁ āĻ•āĻžāϜāϗ⧁āϞ⧋ non-blocking āĻ­āĻžāĻŦ⧇ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āϝ⧇āĻŽāύ: setTimeout, fetch, āĻŦāĻž AJAX āĻ•āϞāĨ¤ āĻāϟāĻŋ Event Loop āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇, āϝāĻž āĻ•āϞāĻŦā§āϝāĻžāĻ•āϗ⧁āϞāĻŋāϕ⧇ āĻāĻ• āϏāĻŽāϝāĻŧ⧇ execute āĻ•āϰ⧇āĨ¤

7. Event Bubbling āĻāĻŦāĻ‚ Event Capturing āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • Event Bubbling: āϝāĻ–āύ āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϘāĻŸā§‡, āϤāĻ–āύ āĻāϟāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡ target element āĻ āϘāĻŸā§‡ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āωāĻĒāϰ⧇āϰ parent elements āĻāϰ āĻĻāĻŋāϕ⧇ āϚāϞ⧇ āϝāĻžāϝāĻŧāĨ¤
  • Event Capturing: āĻāϰ āωāĻ˛ā§āĻŸā§‹, āχāϭ⧇āĻ¨ā§āϟāϟāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡ root element āĻ āϘāĻŸā§‡ āĻāĻŦāĻ‚ āύāĻŋāĻšā§‡āϰ target element āĻ āĻĒ⧌āρāĻ›āĻžāϝāĻŧāĨ¤

8. thisāϕ⧀?

āωāĻ¤ā§āϤāϰ: thisāĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϝāĻž āĻŦāĻ°ā§āϤāĻŽāĻžāύ execution context āϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāϟāĻŋ āϏ⧇āχ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϝāĻž āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻ•āϞ āĻ•āϰ⧇āϛ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const person = {
  name: 'Alice',
  greet: function() {
    console.log('Hello, ' + this.name);
  }
}

person.greet(); // Output: Hello, Alice

9. == āĻāĻŦāĻ‚ === āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

== (Loose Equality): āĻāϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ type coercion āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āϤāĻžāĻĻ⧇āϰ āϤ⧁āϞāύāĻž āĻ•āϰ⧇āĨ¤
=== (Strict Equality): āĻāϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞāĻŋāϰ type āĻāĻŦāĻ‚ value āωāĻ­āϝāĻŧāχ āĻšā§‡āĻ• āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āĻāĻ•āχ āύāĻž āĻšāϝāĻŧ, āϤāĻŦ⧇ āĻāϟāĻŋ false āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

console.log(1 == '1');  // true (type coercion āĻšā§Ÿ)
console.log(1 === '1'); // false (different types)

10. Promises āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ:
Promise āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝāĻž āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇ āϕ⧋āύ āĻāĻ•āϟāĻŋ asynchronous operation āĻāϰ āϏāĻĢāϞāϤāĻž āĻŦāĻž āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦ āĻ•āϰ⧇āĨ¤ Promises āĻāϰ āϤāĻŋāύāϟāĻŋ āĻ¸ā§āĻŸā§‡āϟ āĻĨāĻžāϕ⧇:

  • Pending: āĻ…āĻĒāĻžāϰ⧇āĻļāύāϟāĻŋ āϚāϞāϛ⧇āĨ¤
  • Fulfilled: āĻ…āĻĒāĻžāϰ⧇āĻļāύāϟāĻŋ āϏāĻĢāϞ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤
  • Rejected: āĻ…āĻĒāĻžāϰ⧇āĻļāύāϟāĻŋ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const promise = new Promise((resolve, reject) => {
  let success = true;
  if(success) {
    resolve('Operation Successful');
  } else {
    reject('Operation Failed');
  }
});

promise.then(result => console.log(result))
       .catch(error => console.log(error));

ā§§ā§§. prototype āĻāĻŦāĻ‚ __proto__ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • prototype: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝāĻž āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤ āĻāϟāĻŋ āύāϤ⧁āύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋāϰ āϏāĻŽāϝāĻŧ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ āĻšā§‡āχāύ⧇ āϝ⧁āĻ•ā§āϤ āĻšāϝāĻŧāĨ¤
  • __proto__: āĻāϟāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āϝāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log('Hello, ' + this.name);
}

const alice = new Person('Alice');
alice.greet(); // Output: Hello, Alice

console.log(alice.__proto__ === Person.prototype); // true

⧧⧍. map, filter, āĻāĻŦāĻ‚ reduce āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • map: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧāĨ¤
  • filter: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞ⧋ āϧāĻžāϰāĻŖ āĻ•āϰ⧇ āϝāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻļāĻ°ā§āϤ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇āĨ¤
  • reduce: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• āĻŽāĻžāύ⧇ āĻ…ā§āϝāĻžāϰ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āωāĻĒāĻžāĻĻāĻžāύāϕ⧇ āϰāĻŋāĻĄāĻŋāωāϏ āĻ•āϰ⧇, āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŽāĻˇā§āϟāĻŋ āĻŦāĻž āϗ⧁āĻŖāĻĢāϞ āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const numbers = [1, 2, 3, 4, 5];

// map
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

// filter
const even = numbers.filter(num => num % 2 === 0);
console.log(even); // [2, 4]

// reduce
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum); // 15

ā§§ā§Š. async āĻāĻŦāĻ‚ await āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: async āĻāĻŦāĻ‚ await āĻšāϞ asynchronous āϕ⧋āĻĄ āϞ⧇āĻ–āĻžāϰ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧāĨ¤ async āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ (Promise) āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ await āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āχ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϰ āĻĢāϞāĻžāĻĢāϞ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('Data received');
    }, 2000);
  });
}

async function getData() {
  console.log('Fetching data...');
  const data = await fetchData();
  console.log(data);
}

getData();
// Output:
// Fetching data...
// (⧍ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒāϰ⧇)
// Data received

ā§§ā§Ē. spread āĻāĻŦāĻ‚ rest āĻ…āĻĒāĻžāϰ⧇āϟāϰ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • spread āĻ…āĻĒāĻžāϰ⧇āϟāϰ (...): āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞ⧋āϕ⧇ āĻĒ⧃āĻĨāĻ• āĻĒ⧃āĻĨāĻ• āĻ•āϰ⧇, āϝ⧇āĻŽāύ āĻĢāĻžāĻ‚āĻļāύ⧇ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĒāĻžāϏ āĻ•āϰāϤ⧇āĨ¤
  • rest āĻ…āĻĒāĻžāϰ⧇āϟāϰ (...): āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('Data received');
    }, 2000);
  });
}

async function getData() {
  console.log('Fetching data...');
  const data = await fetchData();
  console.log(data);
}

getData();
// Output:
// Fetching data...
// (⧍ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒāϰ⧇)
// Data received

ā§§ā§Ģ. debounce āĻāĻŦāĻ‚ throttle āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • Debounce: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āĻŦāĻžāϰ āĻ•āϞ āĻšāϤ⧇ āĻŦāĻžāϧāĻž āĻĻ⧇āϝāĻŧ, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ āĻĒ⧇āϰ⧋āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤
  • Throttle: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•āϞ āĻ•āϰāĻž āύāĻž āϝāĻžāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// Debounce
function debounce(func, delay) {
  let timeout;
  return function(...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(this, args), delay);
  }
}

window.addEventListener('resize', debounce(() => {
  console.log('Window resized');
}, 500));

// Throttle
function throttle(func, limit) {
  let inThrottle;
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  }
}

window.addEventListener('scroll', throttle(() => {
  console.log('Scrolled');
}, 1000));

ā§§ā§Ŧ. bind, call, āĻāĻŦāĻ‚ apply āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • call: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ this āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ āϏāĻš āĻ•āϞ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āĻĒāĻžāϏ āĻ•āϰ⧇āĨ¤
  • apply: āĻāϟāĻŋ call āĻāϰ āĻŽāϤāχ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāϏ āĻ•āϰ⧇āĨ¤
  • bind: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ this āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ āϏāĻš āĻ•āϞ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const person = {
  name: 'Alice'
};

function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

// call
greet.call(person, 'Hello', '!'); // Hello, Alice!

// apply
greet.apply(person, ['Hi', '!!']); // Hi, Alice!!

// bind
const greetAlice = greet.bind(person);
greetAlice('Hey', '!!!'); // Hey, Alice!!!

ā§§ā§­. undefined āĻāĻŦāĻ‚ null āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • undefined: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻž āχāĻ™ā§āĻ—āĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āϕ⧋āύ⧋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āϟāĻŋ āϕ⧋āύ⧋ āĻŽāĻžāύ āϧāĻžāϰāĻŖ āĻ•āϰāϛ⧇ āύāĻžāĨ¤
  • null: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻž āχāĻ™ā§āĻ—āĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āϕ⧋āύ⧋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϏāĻšā§‡āϤāύāĻ­āĻžāĻŦ⧇ āϕ⧋āύ⧋ āĻŽāĻžāύ āύ⧇āχ āĻŦāϞ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

let a;
console.log(a); // undefined

let b = null;
console.log(b); // null

ā§§ā§Ž. localStorage āĻāĻŦāĻ‚ sessionStorage āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

localStorage: āĻāϟāĻŋ āĻĄā§‡āϟāĻž āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻ¸ā§āĻĨāĻžāϝāĻŧā§€āĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇, āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻŦāĻ¨ā§āϧ āĻšāϞ⧇āĻ“ āĻĄā§‡āϟāĻž āĻĨāĻžāĻ•āĻŦ⧇āĨ¤
sessionStorage: āĻāϟāĻŋ āĻĄā§‡āϟāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦā§āϰāĻžāωāϜāĻžāϰ āϏ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇, āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻŦāĻ¨ā§āϧ āĻ•āϰāϞ⧇ āĻĄā§‡āϟāĻž āĻŽā§āϛ⧇ āϝāĻžāĻŦ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// localStorage
localStorage.setItem('username', 'Alice');
console.log(localStorage.getItem('username')); // Alice

// sessionStorage
sessionStorage.setItem('token', '12345');
console.log(sessionStorage.getItem('token')); // 12345

⧧⧝. JSON.stringify āĻāĻŦāĻ‚ JSON.parse āϕ⧀?

āωāĻ¤ā§āϤāϰ:

  • JSON.stringify: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϕ⧇ JSON āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧇āĨ¤
  • JSON.parse: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ JSON āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϕ⧇ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const obj = { name: 'Alice', age: 25 };

// stringify
const jsonString = JSON.stringify(obj);
console.log(jsonString); // '{"name":"Alice","age":25}'

// parse
const parsedObj = JSON.parse(jsonString);
console.log(parsedObj); // { name: 'Alice', age: 25 }

⧍ā§Ļ. strict mode āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Strict mode āĻšāϞ⧋ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻĢāĻŋāϚāĻžāϰ āϝāĻž āϕ⧋āĻĄā§‡āϰ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ āĻ•āĻŽā§āĻĒāύ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻŦāĻŋāĻšā§‡āĻ­āĻŋāϝāĻŧāϰ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϕ⧋āĻĄ āφāϰāĻ“ āύāĻŋāϰāĻžāĻĒāĻĻ āĻāĻŦāĻ‚ āĻ¤ā§āϰ⧁āϟāĻŋ āĻŽā§āĻ•ā§āϤ āĻšāϝāĻŧāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ:

'use strict';

function myFunction() {
  // Strict mode-āĻ āĻ•āĻŋāϛ⧁ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āϝāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒāĻžāϰāϤ⧇āύ āύāĻž
  // āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĄāĻŋāĻ•ā§āĻ˛ā§‡ā§ŸāĻžāϰ āĻ•āϰāĻž
  var x = 10;
  // var x = 20; // āĻāϟāĻŋ Strict mode-āĻ āĻāϰāϰ āĻĻāĻŋāĻŦ⧇
}

myFunction();

⧍⧧. setTimeout āĻāĻŦāĻ‚ setInterval āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • setTimeout: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ āĻĒāϰ⧇ āĻāĻ•āĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ āĻ•āϰ⧇āĨ¤
  • setInterval: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧ āĻ…āĻ¨ā§āϤāϰ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦāĻžāϰāĻŦāĻžāϰ āĻ•āϞ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// setTimeout
setTimeout(() => {
  console.log('This runs once after 2 seconds');
}, 2000);

// setInterval
const intervalId = setInterval(() => {
  console.log('This runs every 3 seconds');
}, 3000);

// āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāϤ⧇
// clearInterval(intervalId);

⧍⧍. new āĻ…āĻĒāĻžāϰ⧇āϟāϰ āϕ⧀ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: new āĻ…āĻĒāĻžāϰ⧇āϟāϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ āϏ⧇āϟ āĻ•āϰ⧇, āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āϟāϰ āĻĢāĻžāĻ‚āĻļāύ⧇ this āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function Person(name) {
  this.name = name;
}

const alice = new Person('Alice');
console.log(alice.name); // Alice

ā§¨ā§Š. bind āĻŽā§‡āĻĨāĻĄ āϕ⧇āύ āĻāĻŦāĻ‚ āĻ•āĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

āωāĻ¤ā§āϤāϰ: bind āĻŽā§‡āĻĨāĻĄ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ this āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĢāĻžāĻ‚āĻļāύ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āϤāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āϝāĻ–āύ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ this āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āϝ⧇āĻŽāύ āχāϭ⧇āĻ¨ā§āϟ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const person = {
  name: 'Alice',
  greet: function() {
    console.log('Hello, ' + this.name);
  }
}

const greet = person.greet.bind(person);
greet(); // Hello, Alice

⧍ā§Ē. Symbol āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Symbol āĻšāϞ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āϝāĻž āχāωāύāĻŋāĻ• āĻāĻŦāĻ‚ āχāĻŽāĻŋāωāĻŸā§‡āĻŦāϞāĨ¤ āĻāϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āϕ⧀ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ āϝāĻžāϤ⧇ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āϗ⧁āϞāĻŋ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āύāĻž āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const sym1 = Symbol('description');
const sym2 = Symbol('description');

console.log(sym1 === sym2); // false

const obj = {


}

console.log(obj[sym1]); // value1
console.log(obj[sym2]); // value2

⧍ā§Ģ. Generator āĻĢāĻžāĻ‚āĻļāύ āϕ⧀ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Generator āĻĢāĻžāĻ‚āĻļāύ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ āϧāϰāύ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āχāϟāĻžāϰ⧇āϟāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ function* āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āĻĻāĻŋāϝāĻŧ⧇ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ yield āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŽāĻžāύ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = myGenerator();

console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
console.log(gen.next().done);  // true

⧍ā§Ŧ. ES6 āĻāϰ āĻ•āĻŋāϛ⧁ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĢāĻŋāϚāĻžāϰ āϕ⧀ āϕ⧀?

āωāĻ¤ā§āϤāϰ: ES6 āĻŦāĻž ECMAScript 2015 āĻšāϞ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻŦ⧜ āφāĻĒāĻĄā§‡āϟ āϝāĻž āĻ…āύ⧇āĻ• āύāϤ⧁āύ āĻĢāĻŋāϚāĻžāϰ āύāĻŋāϝāĻŧ⧇ āφāϏ⧇āĨ¤ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĢāĻŋāϚāĻžāϰ āĻšāϞ⧋:

  • Let āĻāĻŦāĻ‚ Const: āĻŦā§āϞāĻ•-āĻ¸ā§āϕ⧋āĻĒāĻĄ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĄāĻŋāĻ•ā§āϞ⧇āϝāĻŧāĻžāϰ⧇āĻļāύāĨ¤
  • Arrow Functions: āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻĢāĻžāĻ‚āĻļāύ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āĻāĻŦāĻ‚ this āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚āĨ¤
  • Template Literals: āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āχāĻ¨ā§āϟāĻžāϰāĻĒā§‹āϞ⧇āĻļāύāĨ¤
  • Destructuring: āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāϰ⧇āϰ āĻŽāĻžāύ āϏāϰāĻžāϏāϰāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āĻĄāĻŋāĻ•ā§āϞ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻžāĨ¤
  • Classes: āĻ•ā§āϞāĻžāϏ-āĻŦ⧇āϏāĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ“āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āĻĄ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āϏāĻžāĻĒā§‹āĻ°ā§āϟāĨ¤
  • Promises: āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚āĨ¤
  • Modules: āϕ⧋āĻĄ āĻŽāĻĄā§āϞāĻžāϰāĻžāχāĻœā§‡āĻļāύ āĻāĻŦāĻ‚ āϰāĻŋāχāωāϜāĻŋāĻŦāĻŋāϞāĻŋāϟāĻŋāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// Arrow Function
const add = (a, b) => a + b;

// Template Literal
const name = 'Alice';
console.log(`Hello, ${name}!`);

// Destructuring
const person = { name: 'Alice', age: 25 };
const { name, age } = person;

// Classes
class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log('Hello, ' + this.name);
  }
}

const alice = new Person('Alice');
alice.greet(); // Hello, Alice

⧍⧭. Memory Leak āϕ⧀ āĻāĻŦāĻ‚ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻĄāĻŧāĻžāύ⧋ āϝāĻžāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Memory Leak āĻšāϞ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŽā§‡āĻŽāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏ⧇āχ āĻŽā§‡āĻŽāϰāĻŋ āĻŽā§āĻ•ā§āϤ āĻšāϝāĻŧ āύāĻžāĨ¤ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻŽā§‡āĻŽā§‹āϰāĻŋ āϞāĻŋāĻ• āĻāĻĄāĻŧāĻžāϤ⧇:

  • āĻ…āύ⧁āĻĒāϝ⧁āĻ•ā§āϤ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϚāϞāĻžāĨ¤
  • āχāϭ⧇āĻ¨ā§āϟ āϞāĻŋāϏ⧇āύāĻžāϰāϗ⧁āϞ⧋ āϰāĻŋāĻŽā§āĻ­ āĻ•āϰāĻž āϝāĻ–āύ āφāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻžāĨ¤
  • āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏāϗ⧁āϞ⧋ āĻŽā§āĻ•ā§āϤ āĻ•āϰāĻž āϝāĻ–āύ āφāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻžāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// āĻŽā§‡āĻŽā§‹āϰāĻŋ āϞāĻŋāĻ• āωāĻĻāĻžāĻšāϰāĻŖ
function createLeak() {
  const element = document.getElementById('myElement');
  window.myLeak = element; // āĻ—ā§āϞ⧋āĻŦāĻžāϞ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āϰāĻžāĻ–āĻž
}

// āĻāĻĄāĻŧāĻžāύ⧋āϰ āωāĻĒāĻžāϝāĻŧ
function preventLeak() {
  const element = document.getElementById('myElement');
  // āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āύāĻž āĻšāϞ⧇ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻŽā§āĻ•ā§āϤ āĻ•āϰāĻž
}

ā§¨ā§Ž. DOM āĻāĻŦāĻ‚ BOM āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ:

  • DOM (Document Object Model): āĻāϟāĻŋ āĻāĻ•āϟāĻŋ API āϝāĻž āĻ“āϝāĻŧ⧇āĻŦ āĻĒ⧇āĻœā§‡āϰ HTML āĻŦāĻž XML āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϕ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŽāĻĄā§‡āϞ āĻ•āϰ⧇, āϝāĻž āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĻāĻŋāϝāĻŧ⧇ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āϟ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
  • BOM (Browser Object Model): āĻāϟāĻŋ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāĻŦāĻ‚ āĻŽā§‡āĻĨāĻĄā§‡āϰ āϏāĻ‚āĻ—ā§āϰāĻš āϝāĻž āĻŦā§āϰāĻžāωāϜāĻžāϰ āωāχāĻ¨ā§āĻĄā§‹ āĻāĻŦāĻ‚ āĻāϰ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇, āϝ⧇āĻŽāύ window, navigator, location āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// DOM - āĻāĻ•āϟāĻŋ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āϟ āĻ•āϰāĻž
const title = document.getElementById('title');
title.textContent = 'New Title';

// BOM - āĻŦā§āϰāĻžāωāϜāĻžāϰ āωāχāĻ¨ā§āĻĄā§‹ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž
console.log(window.innerWidth);
window.alert('Hello!');

⧍⧝. Event Delegation āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Event Delegation āĻšāϞ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻ•āύāĻŋāĻ• āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡ āχāϭ⧇āĻ¨ā§āϟ āϞāĻŋāϏ⧇āύāĻžāϰ āĻŦāϏāĻžāύ⧋ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϚāĻžāχāĻ˛ā§āĻĄ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āωāĻ¨ā§āύāϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āχāϭ⧇āĻ¨ā§āϟ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚ āϏāĻšāϜ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// HTML
/*
<ul id="parentList">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
*/

// JavaScript
const parentList = document.getElementById('parentList');

parentList.addEventListener('click', function(event) {
  if(event.target && event.target.nodeName === 'LI') {
    console.log('List item clicked:', event.target.textContent);
  }
});

ā§Šā§Ļ. Shadow DOM āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ?

āωāĻ¤ā§āϤāϰ: Shadow DOM āĻšāϞ āĻ“āϝāĻŧ⧇āĻŦ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻ…āĻ‚āĻļ āϝāĻž āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ•, āχāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āĻŸā§‡āĻĄ DOM āϰ⧁āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻ¸ā§āϟāĻžāχāϞ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āφāχāϏ⧋āϞ⧇āĻļāύ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āĻŦāĻžāχāϰ⧇āϰ āϕ⧋āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āύāĻž āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const host = document.getElementById('shadowHost');
const shadowRoot = host.attachShadow({ mode: 'open' });

shadowRoot.innerHTML = `
  <style>
    p { color: blue; }
  </style>
  <p>This is inside Shadow DOM</p>
`;

ā§Šā§§. Immutable āĻāĻŦāĻ‚ Mutable āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŋ?
āωāĻ¤ā§āϤāϰ:

  • Immutable: āĻāϗ⧁āϞ⧋ āĻāĻŽāύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝāĻž āĻāĻ•āĻŦāĻžāϰ āϤ⧈āϰāĻŋ āĻšāϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϞ⧇ āύāϤ⧁āύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻšāϝāĻŧāĨ¤
  • Mutable: āĻāϗ⧁āϞ⧋ āĻāĻŽāύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝāĻž āϤāĻžāĻĻ⧇āϰ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// Mutable
const obj = { name: 'Alice' };
obj.name = 'Bob'; // āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ

// Immutable (using Object.freeze)
const immutableObj = Object.freeze({ name: 'Alice' });
immutableObj.name = 'Bob'; // āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāĻŦ⧇ āύāĻž
console.log(immutableObj.name); // Alice

ā§Šā§¨. Destructuring āĻ•āĻŋ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Destructuring āĻšāϞ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āϝāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦāĻž āĻ…ā§āϝāĻžāϰ⧇āϰ āĻŽāĻžāύāϗ⧁āϞ⧋āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ āύāĻŋāϝāĻŧ⧇ āφāϏ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// Array Destructuring
const numbers = [1, 2, 3];
const [a, b, c] = numbers;
console.log(a, b, c); // 1 2 3

// Object Destructuring
const person = { name: 'Alice', age: 25 };
const { name, age } = person;
console.log(name, age); // Alice 25

ā§Šā§Š. Immutable Data Structures āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ?

āωāĻ¤ā§āϤāϰ: Immutable Data Structures āĻšāϞ āĻāĻŽāύ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āϝāĻž āĻāĻ•āĻŦāĻžāϰ āϤ⧈āϰāĻŋ āĻšāϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āĻāϟāĻŋ āĻĄā§‡āϟāĻž āĻĢā§āϞ⧋āϕ⧇ āϏāĻšāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāĻ— āĻ•āĻŽāĻžāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ āϰāĻŋāϝāĻŧ⧇āĻ•ā§āĻŸā§‡āϰ āĻŽāϤ⧋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϤ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const original = { name: 'Alice', age: 25 };

// Immutable update
const updated = { ...original, age: 26 };
console.log(original.age); // 25
console.log(updated.age);  // 26

ā§Šā§Ē. CORS (Cross-Origin Resource Sharing) āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: CORS āĻšāϞ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻĢāĻŋāϚāĻžāϰ āϝāĻž āĻ“āϝāĻŧ⧇āĻŦ āĻŦā§āϰāĻžāωāϜāĻžāϰāϕ⧇ āĻāĻ• āĻĄā§‹āĻŽā§‡āχāύ āĻĨ⧇āϕ⧇ āĻ…āĻ¨ā§āϝ āĻĄā§‹āĻŽā§‡āχāύ⧇āϰ āϰāĻŋāϏ⧋āĻ°ā§āϏ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻ āĻŋāĻ• āĻšā§‡āĻĄāĻžāϰ āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ CORS āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

Access-Control-Allow-Origin: https://example.com

āĻāχ āĻšā§‡āĻĄāĻžāϰāϟāĻŋ āĻŦā§āϰāĻžāωāϜāĻžāϰāϕ⧇ āĻŦāϞ⧇ āϝ⧇ https://example.com āĻĨ⧇āϕ⧇ āφāϏāĻž āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

ā§Šā§Ģ. Service Workers āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Service Workers āĻšāϞ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϝāĻž āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϰāĻžāύ āĻ•āϰ⧇, āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•ā§āϝāĻžāϚ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ…āĻĢāϞāĻžāχāύ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ PWA (Progressive Web Apps) āϤ⧈āϰāĻŋāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// service-worker.js
self.addEventListener('install', event => {
  console.log('Service Worker installing.');
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => response || fetch(event.request))
  );
});

ā§Šā§Ŧ. WebAssembly āϕ⧀ āĻāĻŦāĻ‚ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāϰ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āĻ•āĻŋ?

āωāĻ¤ā§āϤāϰ: WebAssembly (Wasm) āĻšāϞ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ āĻĢāϰāĻŽā§āϝāĻžāϟ āϝāĻž āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āωāĻšā§āϚ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻžāϰ āϕ⧋āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāϟāĻŋ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟāĻžāϰāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϝ⧇āĻ–āĻžāύ⧇ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻšāĻžāχ-āϞ⧇āϭ⧇āϞ āϞāϜāĻŋāĻ• āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ“āϝāĻŧāĻžāϏāĻŽ āĻšāĻžāχ-āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻ•āĻžāϜāϗ⧁āϞāĻŋāϕ⧇ āĻĻā§āϰ⧁āϤ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĨ⧇āϕ⧇ WebAssembly āĻŽāĻĄāĻŋāωāϞ āϞ⧋āĻĄ āĻ•āϰāĻž
fetch('module.wasm')
  .then(response => response.arrayBuffer())
  .then(bytes => WebAssembly.instantiate(bytes))
  .then(results => {
    const instance = results.instance;
    console.log(instance.exports.exportedFunction());
  });

ā§Šā§­. Memoization āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Memoization āĻšāϞ āĻāĻ•āϟāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻŸā§‡āĻ•āύāĻŋāĻ• āϝ⧇āĻ–āĻžāύ⧇ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞ⧋ āĻ•ā§āϝāĻžāĻļ⧇ āĻ•āϰ⧇ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ āϝāĻžāϤ⧇ āĻāĻ•āχ āχāύāĻĒ⧁āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ—āĻŖāύāĻž āύāĻž āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ āĻ­āĻžāϰ⧀ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function memoize(fn) {
  const cache = {};
  return function(...args) {
    const key = JSON.stringify(args);
    if(cache[key]) {
      return cache[key];
    } else {
      const result = fn(...args);
      cache[key] = result;
      return result;
    }
  }
}

const slowFunction = (num) => {
  // āĻ­āĻžāϰ⧀ āĻ•āĻžāĻœā§‡āϰ āϏāĻŋāĻŽā§āϞ⧇āĻļāύ
  for(let i = 0; i < 1e9; i++) {}
  return num * 2;
}

const fastFunction = memoize(slowFunction);

console.log(fastFunction(10)); // āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ: āϏāĻŽāϝāĻŧ āϏāĻžāĻĒ⧇āĻ•ā§āώ
console.log(fastFunction(10)); // āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāĻŦāĻžāϰ: āĻ•ā§āϝāĻžāĻļ āĻĨ⧇āϕ⧇ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ

ā§Šā§Ž. Tail Call Optimization āϕ⧀?

āωāĻ¤ā§āϤāϰ: Tail Call Optimization (TCO) āĻšāϞ āĻāĻ•āϟāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āϝ⧇āĻ–āĻžāύ⧇ āϰāĻŋāĻ•āĻžāĻ°ā§āϏāĻŋāĻ­ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻļ⧇āώ āĻ•āϞāϟāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰ⧇ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻ“āĻ­āĻžāϰāĻĢā§āϞ⧋ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ•āĻŋāϛ⧁ āĻ­āĻžāώāĻžāϝāĻŧ āĻāĻŦāĻ‚ āχāĻžā§āϜāĻŋāύ⧇ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

function factorial(n, acc = 1) {
  if(n <= 1) return acc;
  return factorial(n - 1, n * acc); // Tail call
}

console.log(factorial(5)); // 120

ā§Šā§¯. Event Loop āϕ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āωāĻ¤ā§āϤāϰ: Event Loop āĻšāϞ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āϝāĻž āϏāĻŋāĻ™ā§āϗ⧇āϞ āĻĨā§āϰ⧇āĻĄā§‡āĻĄ āĻ­āĻžāώāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻ•āĻŋāω āĻāĻŦāĻ‚ āĻŽāĻžāχāĻ•ā§āϰ⧋āϟāĻžāĻ¸ā§āĻ• āĻ•āĻŋāωāϝāĻŧ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻĢā§āϰāĻŋ āĻšāϞ⧇ āĻ•āϞāĻŦā§āϝāĻžāĻ•āϗ⧁āϞ⧋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

console.log('Start');

setTimeout(() => {
  console.log('Timeout');
}, 0);

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('End');

// Output:
// Start
// End
// Promise
// Timeout

ā§Ēā§Ļ. Immutable.js āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ?

āωāĻ¤ā§āϤāϰ: Immutable.js āĻšāϞ āĻāĻ•āϟāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϝāĻž āχāĻŽāĻŋāωāĻŸā§‡āĻŦāϞ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇, āϝ⧇āĻŽāύ āχāĻŽāĻŋāωāĻŸā§‡āĻŦāϞ āϞāĻŋāĻ¸ā§āϟ, āĻŽā§āϝāĻžāĻĒ, āϏ⧇āϟ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āĻāϟāĻŋ āĻĄā§‡āϟāĻž āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύ⧇ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰ⧇, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ āϰāĻŋāϝāĻŧ⧇āĻ•ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

const { Map } = require('immutable');

const original = Map({ name: 'Alice', age: 25 });
const updated = original.set('age', 26);

console.log(original.get('age')); // 25
console.log(updated.get('age'));  // 26

ā§Ēā§§. Higher-Order Functions āϕ⧀? āωāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧁āύāĨ¤

āωāĻ¤ā§āϤāϰ: Higher-Order Functions āĻšāϞ āϏ⧇āχ āϧāϰāύ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āĻ…āĻ¨ā§āϝ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āĻ…āĻĨāĻŦāĻž āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻĢāĻžāĻ‚āĻļāύāĻžāϞ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻāϰ āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϧāĻžāϰāĻŖāĻžāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

// Map
const map = new Map();
const obj = {};
map.set(obj, 'value');
console.log(map.get(obj)); // 'value'

// WeakMap
const weakMap = new WeakMap();
weakMap.set(obj, 'value');
console.log(weakMap.get(obj)); // 'value'

ā§Ē⧍. State Management āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ?

āωāĻ¤ā§āϤāϰ: State Management āĻšāϞ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻ¸ā§āĻŸā§‡āϟ (āĻĄā§‡āϟāĻž) āĻĒāϰāĻŋāϚāĻžāϞāύāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāĨ¤ āĻāϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ āĻŦāĻĄāĻŧ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϤ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻ¸ā§āĻŸā§‡āϟ āĻļ⧇āϝāĻŧāĻžāϰ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϕ⧇āύ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ:

  • āϏāĻšāϜ āĻ¸ā§āĻŸā§‡āϟ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚: āĻ¸ā§āĻŸā§‡āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āϏāĻšāĻœā§‡ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
  • āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻĄā§‡āϟāĻž āĻļ⧇āϝāĻŧāĻžāϰāĻŋāĻ‚: āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻĄā§‡āϟāĻž āϏāĻšāĻœā§‡ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
  • Predictable State Updates: āĻ¸ā§āĻŸā§‡āϟ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞ⧋ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽāĻžāύāϝ⧋āĻ—ā§āϝ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ: React āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ Redux āĻŦā§āϝāĻŦāĻšāĻžāϰ:

// Action
const increment = () => ({ type: 'INCREMENT' });

// Reducer
function counter(state = 0, action) {
  switch(action.type) {
    case 'INCREMENT':
      return state + 1;
    default:
      return state;
  }
}

// Store
import { createStore } from 'redux';
const store = createStore(counter);

// Subscribe
store.subscribe(() => console.log(store.getState()));

// Dispatch
store.dispatch(increment()); // 1
store.dispatch(increment()); // 2


This content originally appeared on DEV Community and was authored by Muhammad Ranju


Print Share Comment Cite Upload Translate Updates
APA

Muhammad Ranju | Sciencx (2024-10-15T16:06:58+00:00) JavaScript interview questions along with explanations in Bangla. Retrieved from https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/

MLA
" » JavaScript interview questions along with explanations in Bangla." Muhammad Ranju | Sciencx - Tuesday October 15, 2024, https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/
HARVARD
Muhammad Ranju | Sciencx Tuesday October 15, 2024 » JavaScript interview questions along with explanations in Bangla., viewed ,<https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/>
VANCOUVER
Muhammad Ranju | Sciencx - » JavaScript interview questions along with explanations in Bangla. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/
CHICAGO
" » JavaScript interview questions along with explanations in Bangla." Muhammad Ranju | Sciencx - Accessed . https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/
IEEE
" » JavaScript interview questions along with explanations in Bangla." Muhammad Ranju | Sciencx [Online]. Available: https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/. [Accessed: ]
rf:citation
» JavaScript interview questions along with explanations in Bangla | Muhammad Ranju | Sciencx | https://www.scien.cx/2024/10/15/javascript-interview-questions-along-with-explanations-in-bangla/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.