⊗jsPmClLEA 261 of 505 menu

Tillämpning av funktioners lexikaliska miljö i JavaScript

Låt oss säga att vi har en funktion som returnerar en annan funktion som sitt resultat:

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

Om den överordnade funktionen har några variabler kommer dessa variabler att ingå i den returnerade funktionens lexikaliska miljö:

function test() { let num = 1; // variabel i den överordnade funktionen return function() { // lexikaliskt miljö = {num: 1} } }

Låt oss skriva console.log i koden för vår returnerade funktion som skriver ut värdet på variabeln num:

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

Låt oss nu anropa den överordnade funktionen test och spara resultatet av dess exekvering i variabeln func:

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

Den returnerade funktionen kommer att sparas i variabeln func. Låt oss anropa vår funktion - som sitt resultat kommer den att skriva ut innehållet i variabeln num:

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

Om man däremot bara försöker skriva ut variabeln num utanför funktionen kommer den inte att vara tillgänglig:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // variabeln num är inte tillgänglig här

Som du ser har den lokala variabeln num bundits till vår funktions lexikaliska miljö och nu, genom att anropa denna funktion var som helst i koden, kan vi få värdet på variabeln num, även om variabeln i sig inte är tillgänglig på platsen där den anropas.

Faktum är att ett liknande resultat kan uppnås genom att göra variabeln num global:

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

Men här kommer det att finnas en betydande skillnad: i det nya alternativet kan variabeln num ändras utanför funktioner (eftersom den är global), medan det i det gamla alternativet inte går.

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

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

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

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

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

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

Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa