Comment correctement déclarer une fonction?
Bonjour à tous,
Vous avez l'habitude de déclarer des fonctions... mais les connaissez-vous si bien que cela?
Certains les déclarent ainsi :
Code:
1 2 3 4
|
function fct() {
// ce que vous voulez...
} |
D'autres, plus soucieux de ne polluer l'espace global feront plutôt ainsi :
Code:
1 2 3 4
|
var fct = function () {
// ce que vous voulez...
}; |
Mieux encore, afin de n'avoir qu'un seul bloc de déclaration par scope :
Code:
1 2 3 4 5
|
var fct;
fct = function () {
// ce que vous voulez...
}; |
Mais cela n'est pas encore suffisant !
En effet, imaginons que votre fonction soit un constructeur :
Code:
1 2 3 4 5 6
|
var UnnamedConstructor;
UnnamedConstructor = function () {
// ce que vous voulez...
};
console.log(new UnnamedConstructor()); // Object { } |
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:
1 2 3 4 5 6
|
var NamedConstructor;
function NamedConstructor() {
// ce que vous voulez...
}
console.log(new NamedConstructor()); // NamedConstructor { } |
La solution, pour avoir le même rendu, sans polluer l'espace global?
Code:
1 2 3 4 5 6
|
var NamedConstructor;
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. ;)
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:
1 2 3 4 5 6 7 8
|
var fct= (new Function(
'var fct;'+
'fct = function fct() {'+
' // ce que vous voulez...'+
'};'+
'return fct;'
))(); |