⊗jsPmCxCL 435 of 505 menu

Kehilangan Konteks dalam JavaScript

Katakan kita mempunyai fungsi dalam fungsi. Mari kita namakan fungsi luaran sebagai parent, dan fungsi dalaman sebagai child:

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

Dari pelajaran sebelumnya, anda tahu bahawa jika mana-mana pembolehubah ditetapkan dalam fungsi luaran - ia akan boleh diakses dalam fungsi dalaman:

function parent() { let str = 'abcde'; function child() { console.log(str); // akan memaparkan 'abcde' } child(); // panggil fungsi dalaman } parent(); // panggil fungsi luaran

Walau bagaimanapun, terdapat satu nuansa: fungsi dalaman mempunyai akses kepada semua pembolehubah fungsi luar, tetapi tidak mempunyai akses kepada this. Maksudnya: jika fungsi luaran terikat kepada beberapa elemen DOM, maka this di dalamnya akan menunjuk kepada elemen tersebut, tetapi this fungsi dalaman - tidak akan!

Jadi, kepada apakah this fungsi dalaman akan menunjuk? Jawapannya: ia akan sama dengan undefined (dalam mod ketat), kerana fungsi tidak terikat kepada apa-apa.

Mari kita uji secara praktikal. Katakan kita mempunyai satu input:

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

Mari kita ikat fungsi parent kepada input ini, yang akan dipanggil apabila input kehilangan fokus:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Akan dipanggil apabila kehilangan fokus: function parent() { // akan ada beberapa kod di sini function child() { // akan ada beberapa kod di sini } child(); // panggil fungsi anak }

Mari kita paparkan kandungan this ke konsol di dua tempat: di dalam fungsi parent dan di dalam fungsi child:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // akan memaparkan rujukan kepada input kami function child() { console.log(this); // akan memaparkan undefined } child(); }

Jalankan kod ini, hilangkan fokus pada input dan lihat pada konsol - anda akan melihat bahawa console.log pertama akan memaparkan rujukan kepada input kami, manakala yang kedua - hanya undefined. Keadaan sedemikian, di mana this secara tidak dijangka menunjuk bukan kepada apa yang kita perlukan, dipanggil kehilangan konteks.

Sekarang katakan dalam satu dan dalam fungsi kedua kita akan memaparkan value input. Tentukan, apa yang akan dipaparkan dalam baris kod yang ditandakan dengan ulasan:

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