10 نکته مهم در جاوااسکریپت

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!

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *