Sobes.tech
Middle

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, this global obyekti (brauzerda window, Node.jsda global) ga murojaat qiladi. Qattiq rejimda ('use strict') bu holda this undefined bo'ladi.

    // Brauzerda
    console.log(this); // window
    
    // Node.jsda
    console.log(this); // global
    
  • Obyekt metodini chaqirish: Agar funksiya obyekt metod sifatida chaqirilsa (nuqta bilan), this bu 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 this global obyekti bilan murojaat qiladi. Qattiq rejimda this undefined bo'ladi.

    function greet() {
      console.log(this);
    }
    greet(); // window (qattiq bo'lmagan rejimda) yoki undefined (qattiq rejimda)
    
  • Konstruktor (yoki new bilan): Agar funksiya new kalit so'zi bilan chaqirilsa, u konstruktor sifatida ishlaydi. Funksiya ichidagi this yangi yaratilgan ob'ektga murojaat qiladi.

    function Person(name) {
      this.name = name;
    }
    const person1 = new Person('Alice');
    console.log(person1.name); // Alice
    
  • call, apply, bind metodlari: Bu metodlar this qiymatini aniq belgilashga imkon beradi.

    • call va apply funksiyani darhol chaqiradi, this birinchi argument sifatida uzatadi. call qolgan argumentlarni alohida qabul qiladi, apply esa massiv sifatida.
    • bind yangi funksiyani qaytaradi, uning this qiymati 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 this qiymatiga ega emas. Ular this ning 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.