⊗jsPmClLEA 261 of 505 menu

Penerapan Lingkungan Leksikal Fungsi dalam JavaScript

Misalkan kita memiliki fungsi yang mengembalikan fungsi lain sebagai hasilnya:

function test() { return function() { } }

Jika fungsi induk memiliki variabel apa pun, maka variabel tersebut akan terkandung dalam lingkungan leksikal fungsi yang dikembalikan:

function test() { let num = 1; // variabel fungsi induk return function() { // lingkungan leksikal = {num: 1} } }

Mari kita tulis dalam kode fungsi yang dikembalikan console.log, yang menampilkan nilai variabel num:

function test() { let num = 1; return function() { console.log(num); } }

Sekarang mari panggil fungsi induk test dan tulis hasilnya ke dalam variabel func:

function test() { let num = 1; return function() { console.log(num); } } let func = test();

Fungsi yang dikembalikan akan ditulis ke dalam variabel func. Mari panggil fungsi kita - hasilnya akan menampilkan isi variabel num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // menampilkan 1

Jika kita mencoba menampilkan variabel num di luar fungsi - variabel tersebut tidak akan dapat diakses:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // variabel num tidak dapat diakses di sini

Seperti yang Anda lihat, variabel lokal num terikat pada lingkungan leksikal fungsi kita dan sekarang, dengan memanggil fungsi ini di mana pun dalam kode, kita bisa mendapatkan nilai variabel num, bahkan jika di tempat pemanggilan variabel ini sendiri tidak dapat diakses.

Sebenarnya, hasil yang serupa dapat dicapai dengan membuat variabel num menjadi global:

function test() { return function() { console.log(num); } } let num = 1; // variabel global let func = test(); func(); // menampilkan 1

Namun, di sini akan ada perbedaan yang signifikan: dalam versi baru, variabel num dapat diubah di luar fungsi (karena bersifat global), sedangkan dalam versi lama - tidak.

Tentukan, tanpa menjalankan kode, apa yang akan ditampilkan di konsol:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

Tentukan, tanpa menjalankan kode, apa yang akan ditampilkan di konsol:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

Tentukan, tanpa menjalankan kode, apa yang akan ditampilkan di konsol:

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

Tentukan, tanpa menjalankan kode, apa yang akan ditampilkan di konsol:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
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