JavaScriptda funktsiya konteksti qayerdan keladi?
sobes.tech AI
AIdan javob
JavaScriptda bajarilish (yoki this) konteksti funksiyani chaqirish paytida aniqlanadi, uning e'lon qilinish paytida emas. Uning qiymatiga quyidagi omillar ta'sir qiladi:
-
Global kontekst: Funktsiyalar tashqarisida,
thisglobal obyekti (brauzerdawindow, Node.jsdaglobal) ga murojaat qiladi. Qattiq rejimda ('use strict') bu holdathisundefinedbo'ladi.// Brauzerda console.log(this); // window // Node.jsda console.log(this); // global -
Obyekt metodini chaqirish: Agar funksiya obyekt metod sifatida chaqirilsa (nuqta bilan),
thisbu obyektga murojaat qiladi.const obj = { name: 'Obj', method: function() { console.log(this.name); } }; obj.method(); // Obj -
"Oddiy" funksiya chaqiruvi: Oddiy chaqiruvda (metod sifatida emas), qattiq rejimda
thisglobal obyekti bilan murojaat qiladi. Qattiq rejimdathisundefinedbo'ladi.function greet() { console.log(this); } greet(); // window (qattiq bo'lmagan rejimda) yoki undefined (qattiq rejimda) -
Konstruktor (yoki
newbilan): Agar funksiyanewkalit so'zi bilan chaqirilsa, u konstruktor sifatida ishlaydi. Funksiya ichidagithisyangi yaratilgan ob'ektga murojaat qiladi.function Person(name) { this.name = name; } const person1 = new Person('Alice'); console.log(person1.name); // Alice -
call,apply,bindmetodlari: Bu metodlarthisqiymatini aniq belgilashga imkon beradi.callvaapplyfunksiyani darhol chaqiradi,thisbirinchi argument sifatida uzatadi.callqolgan argumentlarni alohida qabul qiladi,applyesa massiv sifatida.bindyangi funksiyani qaytaradi, uningthisqiymati doimiy ravishda birinchi argument bilan "biriktirilgan" bo'ladi.
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 -
Qayrilma funksiyalar: Qayrilma funksiyalar o'zining
thisqiymatiga ega emas. Ularthisning qiymatini leksikal muhitdan "o'zlashtiradi" va bu ularni metodlar ichidagi callbacklar yoki DOM voqealar bilan ishlashda foydali qiladi.const objWithArrow = { name: 'Arrow Obj', method() { const arrowFunc = () => { console.log(this.name); // `this` `method` (objWithArrow) dan olinadi }; arrowFunc(); } }; objWithArrow.method(); // Arrow Obj // Oddiy funksiyaga solishtiring const objWithRegular = { name: 'Regular Obj', method() { const regularFunc = function() { console.log(this); // `this` window yoki undefined (qattiq rejimda) bo'ladi }; regularFunc(); } }; objWithRegular.method(); // window (yoki undefined)
Kontekstni aniqlash JavaScriptning asosiy xususiyatlaridan biri bo'lib, bu qoidalarni tushunish funksiyalar va obyektlar bilan to'g'ri ishlash uchun juda muhimdir.