⊗jsPmCxCL 435 of 505 menu

JavaScriptда контекст йўқолиши

Фарз қилайлик, бизда функциянинг ичида функция бор. Ташқи функцияни parent деб атаймиз, ва ичкини - child:

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

Олдинги дарслардан билсангиз, агар ташқи функцияда бирор ўзгарувчини белгиланса - у ички функцияда мумкин бўлади:

function parent() { let str = 'abcde'; function child() { console.log(str); // 'abcde' ни кўрсатади } child(); // ички функцияни чақирамиз } parent(); // ташқи функцияни чақирамиз

Бирок, бир нуқта бор: ички функция ташқи функциянинг ҳамма ўзгарувчиларига кира олади, лекин this га кира олмайди. Яъни: агар ташқи функция бирор DOM элементига богланган бўлса, ундаги this шу элементни кўрсатади, лекин ички функциянинг this - кўрсатмайди!

У ҳолда ички функциядаги this nimani кўрсатади? Жавоб: у undefined га тенг бўлади (қаттиқ режимда), чунки функция ҳеч нарсага богланмаган.

Келинг, амалиётда текшириб кўрамиз. Фарз қилайлик, бизда инпут берилган:

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

Бу инпутга parent функцияни боглаймиз, у инпут фокусни йўқотганида чақирилади:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Фокус йўқолганида чақирилади: function parent() { // бу ерда қандайдир код бўлади function child() { // бу ерда қандайдир код бўлади } child(); // фарзанд функцияни чақирамиз }

Келинг, this ning мазмунини икки жойда консольга чиқарайлик: parent функциясининг ичида ва child функциясининг ичида:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // бизнинг инпутга ҳаволани чиқаради function child() { console.log(this); // undefined ни чиқаради } child(); }

Бу кодни ишга туширинг, инпутдан фокусни йўкотинг ва консольга қаранг - сиз кўрасизки, биринчи console.log консольга бизнинг инпутга ҳаволани чиқаради, ва иккинчи - жуда undefined ни. Бундай вазият, қачонки this кутганнимиздан бошқа нарсани кўрсатса, контекст йўқолиши деб аталади.

Энди фарз қилайлик, битта ва иккинчи функцияда биз инпутнинг value сини чиқарамиз. Аниқланг, изохлар билан белгиланган код сатрларида нима чиқади:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // нима чиқади? function child() { console.log(this.value); // нима чиқади? } child(); }
Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш