Bonjour à tous,
Vous avez l'habitude de déclarer des fonctions... mais les connaissez-vous si bien que cela?
Certains les déclarent ainsi :
D'autres, plus soucieux de ne polluer l'espace global feront plutôt ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function fct() { // ce que vous voulez... }
Mieux encore, afin de n'avoir qu'un seul bloc de déclaration par scope :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var fct = function () { // ce que vous voulez... };
Mais cela n'est pas encore suffisant !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var fct; fct = function () { // ce que vous voulez... };
En effet, imaginons que votre fonction soit un constructeur :
Alors, oui, on a un objet mais, en console, il est impossible de savoir de quel constructeur provient cet objet, comme si on avait fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var UnnamedConstructor; UnnamedConstructor = function () { // ce que vous voulez... }; console.log(new UnnamedConstructor()); // Object { }
La solution, pour avoir le même rendu, sans polluer l'espace global?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var NamedConstructor; function NamedConstructor() { // ce que vous voulez... } console.log(new NamedConstructor()); // NamedConstructor { }
Retenez bien, c'est le mot qui suit le mot-clé function qui nomme la fonction, pas la variable qui contient cette fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var NamedConstructor; NamedConstructor = function NamedConstructor() { // ce que vous voulez... }; console.log(new NamedConstructor()); // NamedConstructor { }
Bien que l'usage de Function soit peu recommandé, de par son appel à eval(), il est parfois nécessaire de créer une fonction dynamique.
Alors, voici comment nommer une fonction dynamique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var fct= (new Function( 'var fct;'+ 'fct = function fct() {'+ ' // ce que vous voulez...'+ '};'+ 'return fct;' ))();
Partager