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
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/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.