Sobes.tech
Junior

JavaScript-də ox funksiyaları və adi funksiyalar arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

  1. Sintaksis:
    • Adi funksiya: function myFunction() { ... }
    • Ox arrow funksiyası: () => { ... } və ya param => { ... }
  2. this konteksti:
    • Adi funksiya: this çağırış kontekstindən asılıdır.
    • Ox arrow funksiyası: this ətraf mühitdən leksik olaraq miras alınır (öz this-i yoxdur).
  3. Konstruktörlər:
    • Adi funksiya: Konstruktör kimi istifadə oluna bilər (new myFunction()).
    • Ox arrow funksiyası: Konstruktör kimi istifadə oluna bilməz.
  4. arguments obyekti:
    • Adi funksiya: Öz arguments obyektinə malikdir, daxil olan arqumentləri saxlayır.
    • Ox arrow funksiyası: Öz arguments obyektinə malik deyil, arqumentlərə rest parametrlər (...args) vasitəsilə daxil olmaq mümkündür.
  5. Adlandırılmış funksiyalar:
    • Adi funksiya: Adlandırıla bilər (function myFunction() { ... }).
    • Ox arrow funksiyası: Əsasən anonimdir, dəyişənə təyin edilir (const myFunction = () => { ... }).
  6. Qeyri-şərti dönüş (implicit return):
    • Adi funksiya: Dəyəri qaytarmaq üçün açıq return istifadə olunmalıdır (sadə hallarda, məsələn IIFE üçün istisna).
    • Ox arrow funksiyası: Bir sətirli bədən üçün qeyri-şərti olaraq ifadənin nəticəsini qaytarır.

Cədvəl müqayisəsi:

Xüsusiyyət Adi funksiya Ox arrow funksiyası
Sintaksis function name() { ... } () => { ... }
this konteksti Dinamik (çağırış konteksti) Leksik (valideyn mühitindən)
Konstruktör Bəli Yox
arguments obyekti Bəli Yox (rest parametrlər istifadə olunur)
Adlandırma Adlandırıla bilər Anonim (təyin edilir)
Qeyri-şərti dönüş Yox (adətən return tələb olunur) Bəli (bir sətirli bədən üçün)
// Adi funksiyaların nümunəsi
function standardFunction() {
  console.log(this); // Çağırış kontekstindən asılıdır
  console.log(arguments); // arguments obyekti mövcuddur
}

const obj = {
  method: standardFunction
};

standardFunction(); // this window və ya undefined olacaq (strict rejimində)
obj.method(); // this obj olacaq
new standardFunction(); // this yeni nümunə olacaq

// Ox arrow funksiyalarının nümunəsi
const arrowFunction = () => {
  console.log(this); // Valideyn mühitindən miras alınır
  // console.log(arguments); // Xəta, arguments mövcud deyil
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // outerMethod-dən miras alınır (outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // this window və ya {} olacaq
outerObj.outerMethod(); // innerArrowFunction içində this outerObj olacaq

// Qeyri-şərti dönüş arrow funksiyada
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5

// Adi funksiya ilə şərti dönüş
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Ox arrow funksiyası konstruktör ola bilməz
// new arrowFunction(); // Xəta: TypeError