Middle
Yoyilgan funksiyalar oddiy funksiyalardan bind metodidan foydalanish zaruriyati bo'yicha qanday farq qiladi?
sobes.tech AI
AIdan javob
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.