« Programmation JavaScript/Ordre d'évaluation » : différence entre les versions

Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
m Robot : Changement de type cosmétique
Ligne 1 :
{{Programmation JavaScript}}
[[Programmation JavaScript/Ligne d'instruction|<< Ligne d'instruction]] / [[Programmation JavaScript/Bloc d'instructions|Bloc d'instructions >>]]
== Scripts ==
Lors du chargement d'une page Web, dès que le navigateur rencontre un script, il l'exécute avant de charger la suite du document HTML. Si le script contient des instructions qui doivent être évaluées immédiatement et qui manipulent le document, ce dernier risque de ne pas être prêt.
 
Ligne 8 :
S'il faut manipuler le document au moment du chargement, il est donc fortement recommandé de déclencher le code ''après'' avoir déclaré toute partie du document qui doit être utilisée. Il reste bien sûr possible de déclarer la plupart du code dans des fonctions avant le corps du document, comme cela est fait couramment, et soit d'appeler les fonctions dans un script ultérieur, soit de placer ces instructions dans la méthode <code>document.onload</code>.
 
== Instructions ==
À la base, chaque fichier ou fragment de code JavaScript est évalué de haut en bas : chaque instruction est exécutée avant de passer à la suivante. Bien entendu, les fonctions, structures de contrôle, et d'autres éléments du langage font que certaines instructions sont évaluées à un autre moment, et/ou plusieurs fois, et/ou pas du tout.
 
== Expressions ==
Les expressions sont évaluées de gauche à droite, en respectant la priorité des opérateurs et les parenthèses. Lorsqu'une expression est composée d'opérations de priorité identique (par exemple, plusieurs additions) la première opération en partant de la gauche est effectuée (et ses opérandes sont évaluées), puis son résultat est utilisé comme opérande de gauche de l'opération suivante (et l'opérande de droite est évaluée), et ainsi de suite.
<source lang="javascript">str = 1 + 3 + "5" + -1 + 2
Ligne 20 :
 
Les opérations de priorité identique ne sont pas évaluées simultanément (techniquement ce ne serait pas possible d'ailleurs) et marginalement, cela peut avoir une influence sur le résultat. Par conséquent, les opérations que l'on appelle commutatives en mathématiques ne sont pas strictement commutatives en JavaScript.
<source lang="javascript">u = v + (v = u) // équivalent à trois instructions séparées pour calculer la suite de Fibonacci
// est différent de :
u = (v = u) + v // façon tordue d'écrire u*=2</source>
Dans cet exemple, l'addition n'est pas commutative. Si l'opération v=u est placée à gauche de l'addition, elle est évaluée en premier et modifie l'autre opérande. En revanche, placée à droite, elle est évaluée ''après'' v, et donc la valeur de v utilisée par l'addition est l'ancienne valeur.