Les Portées Lexicales des Fonctions en JavaScript

Les Portées Lexicales des Fonctions (Lexical Scoping) en JavaScript

fonction portée lexicale javascript lexical scoping image

 

Les portées lexicales, ou « lexical scoping » en anglais, jouent un rôle fondamental dans la manière dont les variables sont accessibles et manipulées dans une fonction en JavaScript.

Ce concept vous permettra de mieux comprendre le comportement des variables dans vos programmes et d’écrire du code performant.

 

Qu’est-ce que la portée lexicale ?

 
 

La portée lexicale désigne la manière dont les variables sont accessibles en fonction de leur position dans le code source.

En JavaScript, les variables sont accessibles dans la portée où elles sont déclarées et dans toutes les portées imbriquées. Cette portée est déterminée lors de la phase de compilation, c’est-à-dire avant que le code ne s’exécute.

C’est comprendre comment les variables et les fonctions interagissent en fonction de leur position dans le script.

Cette interaction est dictée par la façon dont les variables sont définies et accessibles dans différentes parties du programme, en particulier à l’intérieur des fonctions.

La portée lexicale se réfère à la capacité d’une fonction à accéder aux variables qui sont définies dans sa propre portée, ainsi que dans les portées englobantes, c’est-à-dire les portées dans lesquelles la fonction a été créée.

 En d’autres termes, l’endroit où vous définissez une variable dans votre code détermine où elle peut être utilisée.

 

Exemple 1 : Portée Lexicale de Base

 

Voyons comment cela fonctionne avec un exemple simple.

 

 

function sayHello() {
  let message = "Bonjour, le monde!";

  function printMessage() {
    console.log(message); // Accède à la variable message
  }

  printMessage();
}

sayHello(); // Affiche Bonjour, le monde!

 

Explication :

  • La fonction sayHello définit une variable message.
  • printMessage est une fonction imbriquée à l’intérieur de sayHello, et elle a accès à message grâce à la portée lexicale.
  • Lorsque printMessage est appelée, elle peut utiliser message, bien qu’elle soit définie à l’extérieur de son propre bloc.
 
Regardons un autre exemple pour clarifier :
 
 
function maFonction() {
  let variableExterieure = 'Je suis extérieure';

  function fonctionInterne() {
    console.log(variableExterieure); // Cette ligne affiche 'Je suis extérieure'
  }

  fonctionInterne();
}

maFonction();

 
 

Dans ce code :

  • variableExterieure est définie dans maFonction.
  • fonctionInterne, définie à l’intérieur de maFonction, peut accéder à variableExterieure. C’est possible grâce à la portée lexicale : fonctionInterne est créée dans le contexte de maFonction, donc elle peut utiliser toutes les variables définies dans ce contexte.

 

Autre Exemple de Base de Portée Lexicale

 

Imaginez un scénario simple où nous avons une fonction interne accédant à une variable définie dans sa fonction parente.

 

 

function parentFunction() {
  let parentVariable = 'Je suis dans la fonction parente';

  function childFunction() {
    console.log(parentVariable); // Accès à parentVariable
  }

  childFunction();
}

parentFunction(); // Affiche Je suis dans la fonction parente

 
 

Explication :

Ici, parentVariable est définie dans parentFunction, mais childFunction, qui est déclarée à l’intérieur de parentFunction, peut accéder à parentVariable. Cela montre que childFunction a accès à la portée de parentFunction grâce à la portée lexicale.

 
 

Exemple de Portée Lexicale et Closures Combinées

 

Pour voir comment les deux concepts se combinent, examinons un exemple où une closure est utilisée à l’intérieur d’une fonction avec plusieurs niveaux de portée. Voir article sur les closures en Javascript.

 

Voici un Exemple  de combinaisons :

 
 

function outerFunction() { let outerVariable = 'Variable extérieure'; function middleFunction() { let middleVariable = 'Variable intermédiaire'; function innerFunction() { console.log(outerVariable); // Accède à outerVariable console.log(middleVariable); // Accède à middleVariable } return innerFunction; } return middleFunction; } const middle = outerFunction(); // middleFunction est maintenant assignée à middle const inner = middle(); // innerFunction est maintenant assignée à inner inner(); // Appelle innerFunction
 

Résultat

Lorsque vous exécutez ce code, le résultat sera :

 

 
// dans la console
Variable extérieure
Variable intermédiaire

 

Explication :

  • outerFunction crée middleFunction, qui à son tour crée innerFunction.
  • innerFunction est une closure qui a accès aux variables outerVariable et middleVariable de ses fonctions parentes.
  • Lors de l’appel de inner(), innerFunction affiche les valeurs des variables définies dans ses fonctions parentes grâce à la portée lexicale.
 
 

Pourquoi la Portée Lexicale est-elle Importante ?

 

Comprendre la portée lexicale vous aide à :

 

  1. Éviter les erreurs : Vous évitez les conflits de noms et les erreurs de portée en sachant où vos variables sont accessibles.
  2. Encapsuler des données : Vous pouvez protéger des données et créer des fonctions avec des états privés grâce aux closures.
  3. Écrire du code modulaire : Vous pouvez concevoir des fonctions qui utilisent des variables définies dans des contextes spécifiques.
 

 

Ce qu’il faut retenir :

 

Les exemples ci-dessus montrent comment JavaScript utilise la portée lexicale pour gérer l’accessibilité des variables dans différentes fonctions et comment les closures (voir chapitre des closures) conservent l’accès aux variables de leur environnement de création.

Comprends ces concepts, tu pourras mieux structurer ton code et utiliser des techniques avancées pour créer des fonctions de plus en plus avancées.

Va encore plus loin, n’oublie pas de consulter mon guide spécial sur les « Techniques de Programmation en JavaScript » !

 

Etoffe ta matrice dans l’apprentissage de JavaScript pour cela :

 

Je t’offre un Guide Bonus Exclusif

 

En allant plus loin, avec ce Guide Bonus Exclusif rien que pour Toi !

Voici un guide complet sur le JavaScript, où tu verras des techniques pour performer en programmation Js.

Ce guide te permettra de perfectionner tes compétences et de devenir un expert JavaScript. Ne le rate pas et développe ton expertise !

 

En adoptant ce qu’il contient, tu rends ton apprentissage de JavaScript plus performant avec une plus grande facilité tous les jours . Voici de quoi enrichir tout de suite ton savoir-faire ? Le guide complet t’attend !

 
 

Rejoignez notre Newsletter et Restez Informé !

Vous souhaitez rester à jour avec les dernières tendances et actualités du monde du développement et le métier de développeur. Comment devenir développeur pro ? Rejoignez notre newsletter pour obtenir un accès exclusif à du contenu premium, des astuces de codage, des mises à jour sur les nouvelles fonctionnalités et bien plus encore !

Avantages de l’Inscription

  • Restez Informé: Recevez des articles informatifs sur les dernières avancées et les meilleures pratiques de codage et les softkills.
  • Promos Exclusives: Accédez à des formations détaillés et à des exemples de code pour améliorer vos compétences en programmation.
  • Aperçus des Nouveautés: Soyez parmi les premiers à découvrir les nouvelles fonctionnalités et les frameworks émergents dans l’écosystème du développement FrontEnd et Backend.
  • Communauté Engagée: Rejoignez une communauté passionnée de développeurs et partagez vos idées, questions et expériences.

Comment S’Inscrire

C’est simple et rapide ! Remplissez le formulaire d’inscription avec votre adresse e-mail et cliquez sur « S’Inscrire ». Vous recevrez régulièrement notre newsletter dans votre boîte de réception.


L’inscription à notre newsletter est un moyen idéal de rester informé et de progresser dans le domaine de la programmation et du développement pour devenir un développeur professionnel ou une développeuse pro.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *