⊗jsPmClLEA 261 of 505 menu

Application de l'environnement lexical des fonctions en JavaScript

Supposons que nous ayons une fonction qui retourne une autre fonction comme résultat :

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

Si la fonction parente a des variables, ces variables seront contenues dans l'environnement lexical de la fonction retournée :

function test() { let num = 1; // variable de la fonction parente return function() { // environnement lexical = {num: 1} } }

Écrivons dans le code de notre fonction retournée console.log, affichant la valeur de la variable num :

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

Appelons maintenant la fonction parente test et enregistrons son résultat dans la variable func :

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

La fonction retournée sera enregistrée dans la variable func. Appelons notre fonction - elle affichera le contenu de la variable num comme résultat :

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

Si vous essayez simplement d'afficher la variable num en dehors de la fonction - elle sera inaccessible :

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // la variable num est inaccessible ici

Comme vous pouvez le voir, la variable locale num s'est liée à l'environnement lexical de notre fonction et maintenant, en appelant cette fonction n'importe où dans le code, nous pouvons obtenir la valeur de la variable num, même si à l'endroit de l'appel cette variable n'est pas accessible par elle-même.

En fait, un résultat similaire peut être obtenu en rendant la variable num globale :

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

Cependant, il y aura une différence substantielle ici : dans la nouvelle version, la variable num peut être modifiée en dehors des fonctions (car elle est globale), alors que dans l'ancienne - non.

Déterminez, sans exécuter le code, ce qui sera affiché dans la console :

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

Déterminez, sans exécuter le code, ce qui sera affiché dans la console :

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

Déterminez, sans exécuter le code, ce qui sera affiché dans la console :

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

Déterminez, sans exécuter le code, ce qui sera affiché dans la console :

function test() { let num = 1; return function() { return num; } } let num = 2; let func = test(); console.log(func());
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser