Middle
JavaScriptdagi funksiyalar konteksti haqida gapir.
sobes.tech AI
AIdan javob
JavaScriptda funksiyaning (this) bajarilish konteksti funksiyani qanday chaqirilgani va uning ichida qanday qiymatlar mavjudligini belgilaydi. Kontekst chaqirilish usuliga qarab dinamik ravishda o'zgaradi:
- Global kontekst: Funktsiyalar tashqarisida,
thisglobal obyekti anglatadi (windowbrauzerda,globalNode.jsda).// Brauzerda console.log(this === window); // true // Node.jsda console.log(this === global); // true - Funktsiya konteksti:
- Standart chaqiriq: Non-strict rejimda, funksiyada
thisglobal obyekti anglatadi (agar funksiya ob'ekt metodi bo'lmasa). Strict rejimda ("use strict";)thisundefinedbo'ladi.function showThis() { console.log(this); } showThis(); // Non-strict rejimda: Global ob'ekt; Strict rejimda: undefined - Ob'ekt metodi sifatida chaqirish:
thismetodga tegishli ob'ektni anglatadi.const user = { name: 'Alice', greet: function() { console.log("Salom, mening ismim " + this.name); } }; user.greet(); // Salom, mening ismim Alice newbilan chaqirish (konstruktor): Yangi ob'ekt yaratadi, bu ob'ektthisqiymati bo'lib, va bu ob'ektni qaytaradi.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob- Aniq kontekst ko'rsatish (
call,apply,bind):call(thisArg, arg1, arg2, ...): Funksiyani belgilanganthisva argumentlar bilan chaqiradi.apply(thisArg, [argsArray]): Funksiyani belgilanganthisva argumentlar bilan chaqiradi, argumentlar massiv shaklida.bind(thisArg, arg1, arg2, ...): Yangi funksiya qaytaradi, uningthisdoimiy ravishdathisArgga bog'langan va argumentlar oldindan bog'langan.
function introduce(greeting, punctuation) { console.log(greeting + ", men " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Salom", "!"); // Salom, men Charlie! introduce.apply(person, ["Hello", "."]); // Hello, men Charlie. const boundIntroduce = introduce.bind(person, "Hey"); boundIntroduce("?"); // Hey, men Charlie?
- Standart chaqiriq: Non-strict rejimda, funksiyada
- Arrow funksiyalar: O'zining
thiskontekstiga ega emas. Ularthisni ularni aniqlagan leksikal kontekstdan oladi.const obj = { name: 'David', sayLater: function() { // `this` bu yerda `obj`ga ishora qiladi setTimeout(() => { // `this` bu yerda ham `obj`ga ishora qiladi (sayLaterdan meros olgan) console.log("Keyin, men " + this.name); }, 1000); } }; obj.sayLater(); // Keyin, men David