Junior
JavaScript-də ox funksiyaları və adi funksiyalar arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
- Sintaksis:
- Adi funksiya:
function myFunction() { ... } - Ox arrow funksiyası:
() => { ... }və yaparam => { ... }
- Adi funksiya:
thiskonteksti:- 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 (özthis-i yoxdur).
- Adi funksiya:
- Konstruktörlər:
- Adi funksiya: Konstruktör kimi istifadə oluna bilər (
new myFunction()). - Ox arrow funksiyası: Konstruktör kimi istifadə oluna bilməz.
- Adi funksiya: Konstruktör kimi istifadə oluna bilər (
argumentsobyekti:- Adi funksiya: Öz
argumentsobyektinə malikdir, daxil olan arqumentləri saxlayır. - Ox arrow funksiyası: Öz
argumentsobyektinə malik deyil, arqumentlərə rest parametrlər (...args) vasitəsilə daxil olmaq mümkündür.
- Adi funksiya: Öz
- 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 = () => { ... }).
- Adi funksiya: Adlandırıla bilər (
- Qeyri-şərti dönüş (implicit return):
- Adi funksiya: Dəyəri qaytarmaq üçün açıq
returnistifadə 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.
- Adi funksiya: Dəyəri qaytarmaq üçün açıq
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