Middle
JavaScript-də funksiyaların konteksti haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də funksiyanın (this) icra konteksti funksiyanın necə çağrıldığını və onun içində hansı dəyərlərin mövcud olduğunu müəyyən edir. Kontekst dinamik olaraq çağırış üsulundan asılı olaraq dəyişir:
- Qlobal kontekst: Funksiyaların xaricində,
thisqlobal obyektə istinad edir (windowbrauzerdə,globalNode.js-də).// Brauzerdə console.log(this === window); // true // Node.js-də console.log(this === global); // true - Funksiya konteksti:
- Standart çağırış: Non-strict rejimdə, funksiyanın içində
thisqlobal obyektə istinad edir (əgər funksiya obyektin metodu deyilsə). Strict rejimdə ("use strict";)thisundefinedolacaq.function showThis() { console.log(this); } showThis(); // Non-strict rejimdə: Qlobal obyekt; Strict rejimdə: undefined - Obyektin metodu kimi çağırış:
thismetodu aid olan obyektə istinad edir.const user = { name: 'Alice', greet: function() { console.log("Salam, mənim adım " + this.name); } }; user.greet(); // Salam, mənim adım Alice newilə çağırış (konstruktor): Yeni obyekt yaradır, bu obyektthisdəyəri olur və həmin obyekti qaytarır.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob- Açıq kontekst göstəricisi (
call,apply,bind):call(thisArg, arg1, arg2, ...): Funksiyanı göstərilənthisvə argumentlərlə çağırır.apply(thisArg, [argsArray]): Funksiyanı göstərilənthisvə argumentlər massivində çağırır.bind(thisArg, arg1, arg2, ...): Yeni funksiya qaytarır, onunthis-i daimi olaraqthisArg-a bağlanır və argumentlər əvvəlcədən bağlanır.
function introduce(greeting, punctuation) { console.log(greeting + ", mən " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Salam", "!"); // Salam, mən Charlie! introduce.apply(person, ["Salam", "."]); // Salam, mən Charlie. const boundIntroduce = introduce.bind(person, "Hə"); boundIntroduce("?"); // Hə, mən Charlie?
- Standart çağırış: Non-strict rejimdə, funksiyanın içində
- Ox funksiyalar: Öz
thiskontekstinə malik deyil. Onlarthis-i onları təyin edən leksikal kontekstdən tuturlar.const obj = { name: 'David', sayLater: function() { // `this` burada `obj`-ə istinad edir setTimeout(() => { // `this` burada da `obj`-ə istinad edir (sayLater`dən miras alınmış) console.log("Sonra, mən " + this.name); }, 1000); } }; obj.sayLater(); // Sonra, mən David