JavaScript - Scope et Bizarrerie

Remi Forax

Scope

Le problèmle de 'var'

Historiquement, on utilisait 'var' pour déclarer les variables locales en JavaScript.
EcmaScript 6 (2015), introduit 'let' et 'const' car 'var' est pas scopé comme il faudrait.

Portées de 'var'

La déclaration d'un 'var' est indépendante du bloc,
les '{' '}' dans lequel elle est déclarée.

 

Portées des variables

Les 'var' sont déclarées en début de fonction.

 

Les deux codes sont équivalents !

Utilisation avant la déclaration

Il est possible de demander la valeur d'une variable qui sera déclarée plus tard :(

 

Utilisation avec les boucles

On peut aussi accéder au variables de boucle après la boucle.

 

'let' résout le problème

let meurt quand le block meurt, au niveau de l'accolade fermante du block.

 

Comment on fait si on a pas 'let'

Avant EcmaScript 6, on utilise une fonction anonyme intermédiaire.
On doit mettre la fonction entre '(' ')', sinon elle doit être nommée.

Ce pattern s'appel IIFE (Immediately Invoked Function Expression)

Et 'const' alors

const sert à indiquer une variable que l'on peut initialiser qu'une seule fois.

 

On ne peut pas déclarer un 'const' sans l'initialiser.

Les bizarreries de JavaScript

Bloc d'instructions

Il n'est pas nécessaire de déclarer un bloc de code
(avec les { et } ) après un if/else/while/for
s'il n'y a qu'une seule instruction

 

La bonne pratique est de toujours mettre des blocs
pour éviter les bugs idiots

Instruction et ;

Les règles ASI (Automatic Semicolon Insertion) insère automatiquement les ';'

Mais la grammaire de JavaScript est ambigüe

 

La bonne pratique est de mettre des ';'

Closure et Variables

Une fonction peut modifier les variables
de la function englobante (ahhh).

Cela rend le code dure à lire !
Solution utiliser 'const'.

Variable globale

Si on déclare une variable sans let/const ou var,
elle est globale et accessible par tout le monde.

 

Les globales sont interdites par la convention de Genève !

Opérations arithmétiques sur des types différents

Effectuer une opération arithmétique sur des valeurs de type différents donne des résultats surprenants

 

Wat ! de Gary Bernhardt