⊗jsPmClLEA 261 of 505 menu

Funkciju leksiskās vides pielietojums JavaScript

Pieņemsim, ka mums ir funkcija, kas savā rezultātā atgriež citu funkciju:

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

Ja vecāku funkcijai ir kādi mainīgie, tad šie mainīgie tiks iekļauti atgrieztās funkcijas leksiskajā vidē:

function test() { let num = 1; // vecāku funkcijas mainīgais return function() { // leksiskā vide = {num: 1} } }

Uzrakstīsim mūsu atgrieztās funkcijas kodā console.log, kas izvada mainīgā num vērtību:

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

Tagad izsauksim vecāku funkciju test un ierakstīsim tās darbības rezultātu mainīgajā func:

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

Mainīgajā func tiks ierakstīta atgrieztā funkcija. Izsauksim mūsu funkciju - savā rezultātā tā izvadīs mainīgā num saturu:

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

Ja vienkārši mēģināt izvadīt mainīgo num ārpus funkcijas - tas būs nepieejams:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // mainīgais num šeit nav pieejams

Kā jūs redzat, lokālais mainīgais num piesaistījās mūsu funkcijas leksiskajai videi un tagad, izsaucot jebkurā koda vietā šo funkciju, mēs varam iegūt mainīgā num vērtību, pat ja izsaukšanas vietā pats šis mainīgais nav pieejams.

Patiesībā līdzīgu rezultātu var sasniegt, padarot mainīgo num par globālu:

function test() { return function() { console.log(num); } } let num = 1; // globālais mainīgais let func = test(); func(); // izvadīs 1

Šeit tomēr būs būtiska atšķirība: jaunajā variantā mainīgo num var mainīt ārpus funkcijām (tā kā tas ir globāls), bet vecajā - ne.

Nosakiet, nepalaidot kodu, ko izvadīs konsolē:

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

Nosakiet, nepalaidot kodu, ko izvadīs konsolē:

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

Nosakiet, nepalaidot kodu, ko izvadīs konsolē:

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

Nosakiet, nepalaidot kodu, ko izvadīs konsolē:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt