JavaScript-də funksiyanın konteksti haradan gəlir?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də icra konteksti (və ya this) funksiyanın çağırıldığı an müəyyən edilir, elan olunduğu deyil. Onun dəyərinə aşağıdakı amillər təsir edir:
-
Qlobal kontekst: Funksiyaların xaricində,
thisqlobal obyektə istinad edir (brauzerdəwindow, Node.js-dəglobal). Qatı rejimdə ('use strict') bu haldathisundefinedolacaq.// Brauzerdə console.log(this); // window // Node.js-də console.log(this); // global -
Obyekt metodunun çağırılması: Əgər funksiya obyektin metodu kimi çağırılırsa (nöqtə ilə),
thishəmin obyektə istinad edir.const obj = { name: 'Obj', method: function() { console.log(this.name); } }; obj.method(); // Obj -
"Adi" funksiya çağırışı: Sadə funksiya çağırışında (metod kimi deyil), qatı rejimdə
thisqlobal obyektə istinad edir. Qatı rejimdəthisundefinedolacaq.function greet() { console.log(this); } greet(); // window (qatı olmayan rejimdə) və ya undefined (qatı rejimdə) -
Konstruktor (yeni ilə): Əgər funksiya
newaçar sözü ilə çağırılırsa, o, konstruktor kimi fəaliyyət göstərir. Funksiya daxilindəthisyeni yaradılmış obyektə istinad edir.function Person(name) { this.name = name; } const person1 = new Person('Alice'); console.log(person1.name); // Alice -
call,apply,bindmetodları: Bu metodlarthisdəyərini açıq şəkildə təyin etməyə imkan verir.callvəapplyfunksiyanı dərhal çağırır,thisilk arqument kimi ötürülür.calldigər arqumentləri ayrıca qəbul edir,applyisə massiv kimi.bindyeni funksiya qaytarır, onunthisdəyəri daimi olaraq ilk arqumentlə "bağlanır".
const anotherObj = { name: 'Another Obj' }; function displayContext() { console.log(this.name); } displayContext.call(anotherObj); // Another Obj displayContext.apply(anotherObj); // Another Obj const boundFunction = displayContext.bind(anotherObj); boundFunction(); // Another Obj -
Ox funksiyalar: Ox funksiyalar öz
this-ə malik deyil. Onlarthisdəyərini leksikal mühitdən "tuturlar" və bu, metodlar daxilində callback-lər və DOM hadisələri ilə işləmək üçün faydalıdır.const objWithArrow = { name: 'Arrow Obj', method() { const arrowFunc = () => { console.log(this.name); // `this` `method`-dan (objWithArrow) götürülür }; arrowFunc(); } }; objWithArrow.method(); // Arrow Obj // Adi funksiya ilə müqayisə const objWithRegular = { name: 'Regular Obj', method() { const regularFunc = function() { console.log(this); // `this` window və ya undefined (qatı rejimdə) olacaq }; regularFunc(); } }; objWithRegular.method(); // window (və ya undefined)
Kontekstin tərifi JavaScript-in əsas xüsusiyyətlərindən biridir və bu qaydaları başa düşmək funksiyalar və obyektlərlə düzgün işləmək üçün çox vacibdir.