⊗jsPmCxCL 435 of 505 menu

JavaScriptda Kontekstni Yo'qotish

Faraz qilaylik, bizda funksiya ichida funksiya mavjud. Tashqi funksiyani parent, va ichki funksiyani esa child deb ataymiz:

function parent() { function child() { } }

Oldingi darslardan bilasizki, agar tashqi funksiyada qandaydir o'zgaruvchi belgilansa - u ichki funksiyada ham mavjud bo'ladi:

function parent() { let str = 'abcde'; function child() { console.log(str); // 'abcde' ni chiqaradi } child(); // ichki funksiyani chaqiramiz } parent(); // tashqi funksiyani chaqiramiz

Biroq, bir nuans mavjud: ichki funksiya tashqi funksiyaning barcha o'zgaruvchilariga kirish huquqiga ega, lekin this ga kirish huquqiga ega emas. Ya'ni: agar tashqi funksiya qandaydir DOM elementiga bog'langan bo'lsa, undagi this shu elementni ko'rsatadi, lekin ichki funksiyadagi this - ko'rsatmaydi!

Xo'sh, ichki funksiyadagi this nimani ko'rsatadi? Javob: u undefined ga teng bo'ladi (qat'iy rejimda), chunki funksiya hech narsaga bog'lanmagan.

Keling, amalda tekshiramiz. Faraz qilaylik, bizda input maydoni mavjud:

<input id="elem" value="text">

Keling, ushbu inputga parent funksiyasini bog'laymiz, u input tomonidan fokus yo'qotilganda chaqiriladi:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Fokus yo'qotilganda chaqiriladi: function parent() { // bu yerda qandaydir kod bo'ladi function child() { // bu yerda qandaydir kod bo'ladi } child(); // ichki funksiyani chaqiramiz }

Keling, this ning mazmunini ikkita joyda: parent funksiyasi ichida va child funksiyasi ichida konsolga chiqaramiz:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // bizning inputga havolani chiqaradi function child() { console.log(this); // undefined ni chiqaradi } child(); }

Ushbu kodni ishga tushiring, inputdan fokusni olib tashlang va konsolga qarang - siz ko'rasiz, birinchi console.log konsolda bizning inputga havolani chiqaradi, ikkinchisi esa shunchaki undefined ni chiqaradi. this biz kutgandek emas, balki bizga kerakli narsani ko'rsatmaydigan bunday holat kontekstni yo'qotish deb ataladi.

Endi faraz qilaylik, birinchi va ikkinchi funksiyalarda biz inputning value sini chiqaramiz. Izohlar bilan belgilangan kod qatorlarida nima chiqishini aniqlang:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // nima chiqadi? function child() { console.log(this.value); // nima chiqadi? } child(); }
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish