Closure Research Papers - Academia.edu (original) (raw)

En fait « --> » n’est pas un opérateur comme tel, mais simplement le complexe [ opérateur de décrémentation « -- » espacé de son opérande (de gauche) et suivi directement du signe supérieur à « > » ] donnant « -- > » : Son similaire... more

En fait « --> » n’est pas un opérateur comme tel, mais simplement le complexe [ opérateur de décrémentation « -- » espacé de son opérande (de gauche) et suivi directement du signe supérieur à « > » ] donnant « -- > » :

Son similaire (aussi un peu truqué) :

6 ++< 1.791759469228055 test.html:4:7
7 ++< 1.9459101490553132 test.html:4:7
8 ++< 2.0794415416798357 test.html:4:7
9 ++< 2.1972245773362196 test.html:4:7
10 ++< 2.302585092994046 test.html:4:7

Variables locales « static » en JavaScript ;

Une « variable locale static » est une variable définie dans une fonction mais qui garde sa valeur même quand la fonction est quittée. JS ne comporte pas une telle sorte de donnée. Comment y suppléer ?

Un LexicalEnvironment est créé pour chaque fonction lors de son exécution. Cet environnement stocke les variables paramètres, les variables locales (déclarées dans la fonction avec var) et les fonctions imbriquées déclarées. Normalement, à la fin de l’exécution de la fonction, son environnement lexical est détruit, avec toutes les variables locales [déclarées avec var].

Mais dès qu’une fonction englobe une autre (fonction englobante) et retourne cette dernière (fermeture ou closure) son environnement lexical n’est plus détruit mais conservé à la fin de son exécution.

En quittant une fonction comportant une fonction imbriquée et retournée par la fonction contenante / englobante, tout l’environnement (variables locales et fonctions) de la première fonction [contenante] persistent dans un objet interne appelé « LexicalEnvironment » de la première fonction, et peuvent servir de (être utilisés comme) variables static exactement comme celles des langages C/C++, et dans une fonction récursive. Cet environnement et ses variables persistent (durée de vie), comme les variables globales, jusqu’à la décharge (fermeture) du document.

Vous pouvez forcer une coercion (coercion explicite) :

La fonction parseInt() covertit excplicitement un numérique littéral en entier,
La fonction parseFloat() covertit excplicitement un numérique littéral en nombre

Le numérique littéral doit être au début de la chaîne.

...

Heureusement que depuis ES6 la définition des valeurs par défaut pour les paramètres est possible (bien entendu incompatible avec les vieux brow-sers). Voir paramètres par défaut (page 8).

Pseudo-Benchmark entre l’opérateur d’exponentiation « x**y » et la mé-thode « Math.pow(x,y) » :

Opérateur d’exponentiation « x**y » :

Méthode « Math.pow(x,y) » :

Boucle sans instruction:

Nous constatons que « a**b » est plus rapide que « Math.pow(a,b) », et que l’exécution propre de la boucle ne consomme relativement pas beau-coup de temps.