⊗jsPmCxCL 435 of 505 menu

Kehilangan Konteks dalam JavaScript

Misalkan kita memiliki fungsi di dalam fungsi. Mari kita sebut fungsi terluar sebagai parent, dan fungsi dalamnya sebagai child:

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

Dari pelajaran sebelumnya Anda tahu bahwa jika suatu variabel ditetapkan di fungsi terluar - variabel tersebut akan dapat diakses di fungsi dalam:

function parent() { let str = 'abcde'; function child() { console.log(str); // akan menampilkan 'abcde' } child(); // memanggil fungsi dalam } parent(); // memanggil fungsi terluar

Namun, ada nuansanya: fungsi dalam memiliki akses ke semua variabel fungsi terluar, tetapi tidak memiliki akses ke this. Artinya: jika fungsi terluar terikat ke suatu elemen DOM, maka this di dalamnya akan merujuk ke elemen tersebut, tetapi this dari fungsi dalam - tidak akan!

Lalu, pada apa this dari fungsi dalam akan merujuk? Jawabannya: itu akan sama dengan undefined (dalam mode ketat), karena fungsi tidak terikat ke apa pun.

Mari kita buktikan secara praktis. Misalkan kita memiliki sebuah input:

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

Mari kita ikat fungsi parent ke input ini, yang akan dipanggil ketika input kehilangan fokus:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Akan dipanggil saat kehilangan fokus: function parent() { // akan ada kode tertentu di sini function child() { // akan ada kode tertentu di sini } child(); // memanggil fungsi child }

Mari kita tampilkan isi dari 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 menampilkan referensi ke input kita function child() { console.log(this); // akan menampilkan undefined } child(); }

Jalankan kode ini, hilangkan fokus pada input dan lihat di konsol - Anda akan melihat bahwa console.log pertama akan menampilkan referensi ke input kita, sedangkan yang kedua - hanya undefined. Situasi seperti ini, ketika this dengan cara yang tidak terduka bagi kita tidak menunjuk pada apa yang kita butuhkan, disebut kehilangan konteks.

Sekarang misalkan di kedua fungsi ini kita akan menampilkan value dari input. Tentukan, apa yang akan ditampilkan pada baris kode yang ditandai dengan komentar:

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