⊗jsPmClLEA 261 of 505 menu

Aplicarea mediului lexical al funcțiilor în JavaScript

Să presupunem că avem o funcție care returnează ca rezultat o altă funcție:

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

Dacă funcția părinte are variabile, aceste variabile vor fi conținute în mediul lexical al funcției returnate:

function test() { let num = 1; // variabila funcției părinte return function() { // mediul lexical = {num: 1} } }

Să scriem în codul funcției noastre returnate console.log, care afișează valoarea variabilei num:

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

Acum să apelăm funcția părinte test și să înregistrăm rezultatul ei în variabila func:

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

În variabila func se va scrie funcția returnată. Să apelăm funcția noastră - ca rezultat va afișa conținutul variabilei num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // va afișa 1

Dacă în schimb încercăm să afișăm variabila num în afara funcției - ea nu va fi accesibilă:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // variabila num nu este accesibilă aici

După cum vedeți, variabila locală num s-a legat de mediul lexical al funcției noastre și acum, apelând această funcție în orice loc din cod, vom putea obține valoarea variabilei num, chiar dacă în locul apelului însăși această variabilă este inaccesibilă.

De fapt, un rezultat similar poate fi obținut făcând variabila num globală:

function test() { return function() { console.log(num); } } let num = 1; // variabilă globală let func = test(); func(); // va afișa 1

Aici, totuși, va fi o diferență substanțială: în noua variantă variabila num poate fi modificată în afara funcțiilor (deoarece este globală), iar în cea veche - nu.

Determinați, fără a rula codul, ce se va afișa în consolă:

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

Determinați, fără a rula codul, ce se va afișa în consolă:

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

Determinați, fără a rula codul, ce se va afișa în consolă:

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

Determinați, fără a rula codul, ce se va afișa în consolă:

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge