1. مفهوم Hoisting
در جاوااسکریپت، متغیرها و توابع قبل از اجرای کد به بالای اسکوپ (Scope) برده می شوند. این فرآیند به نام “Hoisting” شناخته می شود.
- متغیرهایی که با
var
تعریف می شوند، هوست می شوند اما مقدار آن هاundefined
است تا زمانی که مقداردهی شوند. - توابع نیز به طور کامل هوست می شوند و می توان آن ها را قبل از تعریفشان فراخوانی کرد.
console.log(hoistedVar); // undefined
var hoistedVar = "I am hoisted";
2. Closure
Closure ها توانایی ذخیره و حفظ دسترسی به متغیرهایی که در محیط اطرافشان تعریف شده اند را دارند، حتی پس از اینکه تابع خارجی اجرا شده باشد.
- کاربرد Closure در ساختارهای مثل توابع بازگشتی و کنترل وضعیت های غیرفعال رایج است.
function outer() {
let outerVar = 'I am from outer';
return function inner() {
console.log(outerVar);
}
}
const innerFunc = outer();
innerFunc(); // "I am from outer"
3. Async و Await
جاوااسکریپت از async/await برای کار با کدهای غیربلوک کننده (non-blocking) و پیمایش بهتر Promise ها استفاده می کند. استفاده از async و await کد را خواناتر و مدیریت خطاها را آسان تر می کند.
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.error('Error fetching data', error);
}
}
4. Arrow Functions
توابع پیکانی (Arrow Functions) در جاوااسکریپت نگارش مختصرتری دارند و به طور خودکار this
را از اسکوپ بالادستی (Lexical Scope) به ارث می برند.
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5
5. Spread Operator (...
)
Spread Operator از جمله قابلیت های مدرن جاوااسکریپت است که امکان کپی کردن یا گسترش آرایه ها، آبجکت ها و یا انتقال آرگومان ها را فراهم می کند.
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]
const obj1 = { name: "John", age: 30 };
const obj2 = { ...obj1, job: "Developer" }; // { name: "John", age: 30, job: "Developer" }
6. Destructuring
Destructuring به شما اجازه می دهد تا مقادیر از آرایه ها و آبجکت ها را به سادگی استخراج کنید.
const [a, b] = [1, 2]; // a = 1, b = 2
const { name, age } = { name: 'Alice', age: 25 }; // name = 'Alice', age = 25
7. Event Loop
Event Loop مکانیزم مهمی در جاوااسکریپت است که نحوه اجرا و مدیریت عملیات های غیرهمزمان (async) را کنترل می کند. جاوااسکریپت تک نخی است، اما با استفاده از Event Loop می تواند عملیات های غیرهمزمان را مدیریت کند و باعث می شود که کدهای غیربلوک کننده به صورت کارآمد اجرا شوند.
- Microtasks (مثل Promise ها) در اولویت اجرا نسبت به Macrotasks (مثل setTimeout) قرار دارند.
8. Strict Mode
استفاده از “Strict Mode” خطاهای رایج را کاهش می دهد و شما را مجبور به نوشتن کد بهتر و صحیح تر می کند.
'use strict';
let x = 10;
9. Prototypes
در جاوااسکریپت، پروتوتایپ ها به آبجکت ها امکان ارث بری از دیگر آبجکت ها را می دهند. این مکانیزم پایه ای برای سیستم شی گرایی در جاوااسکریپت است.
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
console.log('Hello ' + this.name);
};
const person1 = new Person('John');
person1.greet(); // Hello John
10. Promises
Promises یکی از روش های اصلی مدیریت کدهای غیرهمزمان در جاوااسکریپت هستند. آن ها به سه حالت pending، fulfilled، یا rejected هستند.
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Success!"), 1000);
});
myPromise.then(result => console.log(result)); // Success!
دیدگاهتان را بنویسید