Pages

Différence entre fonction expression et fonction déclaration !

Voici deux déclarations de fonction.
  1. Fonction déclaration : message
  2. Fonction expression : mes

console.log(typeof message);// function
console.log(typeof mes); // undefined

// 1
function message(){
  console.log("hi");
}

// 2
var mes = function (){
  console.log("hi");
};

Nous allons étudier les différences de ces deux déclarations.

Portée

La fonction message est disponible dès que le programme est chargé, alors que la fonction mes ne sera disponible qu'après son affectation. 

Le test typeof des types en début de programme le démontre.

Autrement dit en début de programme, vous pouvez utiliser message mais pas mes


Syntaxe

Une autre différence est la présence du point virgule lors de la définition de mes ; il s'agit en effet d'une affectation, il faut donc mettre un point virgule.


Argument

Un des intérêt d'utiliser l'affectation est que la fonction peut être passée en argument d'une autre fonction.

wellcome( mes ); // affiche "hi"

function wellcome ( textFx ){
  textFx ();
}


intérêt

Un autre intérêt est le dynamisme de l'affectation. 

En voici un exemple :

let mes,
    AM = true;

if ( AM ) {
    mes = function (){
      console.log("good morning");
    };
}

else { //pm
   mes = function (){
      console.log("good afternoon");
   };
}

wellcome ( mes );
function wellcome ( text ){
  text ();

}



JS Bin on jsbin.com