⊗jsPmClLEA 261 of 505 menu

Funktsioonide leksilise keskkonna rakendamine JavaScriptis

Oletame, et meil on funktsioon, mis tagastab teise funktsiooni:

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

Kui vanemfunktsioonil on mõned muutujad, siis need muutujad sisalduvad tagastatava funktsiooni leksilises keskkonnas:

function test() { let num = 1; // vanemfunktsiooni muutuja return function() { // leksiline keskkond = {num: 1} } }

Kirjutame oma tagastatava funktsiooni koodi console.log, mis väljastab muutuja num väärtuse:

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

Nüüd kutsume välja vanemfunktsiooni test ja kirjutame selle tulemuse muutujasse func:

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

Muutujasse func kirjutatakse tagastatud funktsioon. Kutsume oma funktsiooni välja - see väljastab muutuja num sisu:

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

Kui aga lihtsalt proovida väljastada muutujat num funktsioonist väljaspool - see pole kättesaadav:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // muutuja num pole siin kättesaadav

Nagu näete, seondus kohalik muutuja num meie funktsiooni leksilise keskkonnaga ja nüüd, see funktsioon välja kutsudes suvalises kohas koodis, saame muutuja num väärtuse, isegi kui väljakutsumise kohas see muutuja ise pole kättesaadav.

Tegelikult saab sarnast tulemust saavutada, muutes muutuja num globaalseks:

function test() { return function() { console.log(num); } } let num = 1; // globaalne muutuja let func = test(); func(); // väljastab 1

Siin on aga oluline erinevus: uues versioonis saab muutujat num muuta funktsioonidest väljaspool (kuna see on globaalne), kuid vanas - mitte.

Määrake, koodi käivitamata, mis väljastatakse konsooli:

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

Määrake, koodi käivitamata, mis väljastatakse konsooli:

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

Määrake, koodi käivitamata, mis väljastatakse konsooli:

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

Määrake, koodi käivitamata, mis väljastatakse konsooli:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu