Middle
Ox işarəsi funksiyaları ilə adi funksiyalar arasındakı fərq bind metodundan istifadə etmə ehtiyacıdır?
sobes.tech Süni İntellekt
AI-dan cavab
Ok işarəli funksiyalar öz this kontekstinə malik deyil. Onlar ətraf mühitdən (lexikal mühit) this-i ələ keçirirlər.
Adi funksiyalar çağırılma üsulundan asılı olaraq öz this-lərini müəyyən edir:
- Qlobal kontekstdə (
windowvə yaglobal). - Obeyektin metodu kimi (
thisobyektə işarə edir). - Konstruktor kimi (
thisyeni nümunəyə işarə edir). call,applyvə yabindistifadə etməklə (thisaçıq şəkildə təyin edilir).
Çünki ok funksiyalar öz this-inə malik deyil, bind-in ok funksiyasında çağırılması məntiqsizdir və leksikal olaraq bağlı this-i dəyişməz. Ok funksiyasında bind çağırmağa cəhd etsəniz, o sadəcə özünü geri qaytaracaq.
Misal:
// Adi funksiya
const normalFunc = function() {
console.log(this.name);
};
const obj1 = { name: 'Obyekt 1', method: normalFunc };
const obj2 = { name: 'Obyekt 2' };
obj1.method(); // Çıxış: Obyekt 1
const boundFunc = normalFunc.bind(obj2);
boundFunc(); // Çıxış: Obyekt 2 (this uğurla dəyişdirildi)
// Ok funksiyası
const arrowFunc = () => {
console.log(this.name);
};
const obj3 = { name: 'Obyekt 3' };
// ArrowFunc ətraf mühitdən `this`-i ələ keçirir (bu halda, qlobal obyekt)
arrowFunc(); // Çıxış: undefined (yəqin ki, `this` `name`-i içermir)
const boundArrowFunc = arrowFunc.bind(obj3);
boundArrowFunc(); // Çıxış: undefined (`this` dəyişməyib, bind təsir etməyib)
// `this`-in ələ keçirilməsi nümunəsi
const person = {
name: 'Alicə',
greet: function() {
// Burada, `this` `person`-a işarə edir
const greetLater = () => {
// Burada, `this` `greet`-dən xarici kontekstdən ələ keçirilir, yəni də `person`
console.log(`Salam, ${this.name}!`);
};
greetLater();
}
};
person.greet(); // Çıxış: Salam, Alicə!
Nəticədə, bind adi funksiyalar üçün onların kontekstini this-i açıq şəkildə təyin etmək üçün lazımdır, ok funksiyalar üçün isə artıqdır, çünki onların this leksikal olaraq müəyyən edilir və bind ilə dəyişdirilə bilməz.