User Tools

Site Tools


jsfn:understanding_hoisting_and_variable_scope

Déterminer le scope des variables

  1. scope : espace ou une variable est accessible
  2. block scope : scope déterminer par des {}
  3. function scope : scope déterminé par les limites d'une fonction. Toute fonction créé par avec le mot-clé var est locale au sein de la fonction. Une variable créée au sein d'une fonction parente est accessible au sein d'une fonction enfant.
  4. chaine de scope (scope chain) : défini le comportement de javascript lorsqu'il ne peut trouver l'objet demandé dans la fonction actuelle : JavaScript va regarder dans les fonctions parentes
  5. Toute variable créée sans le mot-clé avr est une variable globale : danger !
  6. variable definitions are hoisted (hissées, élevées). C'est à dire qu'au moment où le code est processé; JavaScript hisse les déclarations de variables en tête de bloc (mais pas les assignations !). Des variables peuvent donc exister avant même que vous les utilisiez.
function chose() {
  var chose_nom = 'chaise';
  function autre_chose() {
    //var chose_nom = 'table';
    console.log('chose = '+chose_nom); // chose = chaise
  }
  autre_chose();
}
chose();
hoisting exampe
function chose() {
  console.log('chose = '+chose_nom); // chose = undefined
  var chose_nom = 'chaise';
}
chose();

Le code ici ne génère pas d'erreur : la déclaration est hissée en tête de bloc fonction et existe donc avec la valeur undefined lorsqu'elle est appelé avant d'être d'être assignée.

En gros le code devient :

function chose() {
  var chose_nom;
  console.log('chose = '+chose_nom); // chose = undefined
  chose_nom = 'chaise';
}
chose();

Note : cela permet d'utiliser une fonction avant sa déclaration. ça n'est pas pour autant une bonne pratique et peut amener d'autres problèmes !

ma_fonction();
function ma_fonction() {
  console.log("bonjour");
}
jsfn/understanding_hoisting_and_variable_scope.txt · Last modified: 2016/01/31 22:28 by leo