salut
en lisant le post-it sur les bonnes pratiques du javascript, tu donnes en lien ce post dont tu es l'auteur, et donc me voilà ici et je te lis :

Envoyé par
Lcf.vs
Bonjour à tous,
Vous avez l'habitude de déclarer des fonctions... mais les connaissez-vous si bien que cela?
Certains les déclarent ainsi :
1 2 3 4
|
function fct() {
// ce que vous voulez...
} |
D'autres,
plus soucieux de ne polluer l'espace global feront plutôt ainsi :
1 2 3 4
|
var fct = function () {
// ce que vous voulez...
}; |
[...]
La solution, pour avoir le même rendu, sans polluer l'espace global?
1 2 3 4 5 6
|
var NamedConstructor;
NamedConstructor = function NamedConstructor() {
// ce que vous voulez...
};
console.log(new NamedConstructor()); // NamedConstructor { } |
[...]
Et perso, je suis comme Bovino, j'ai du mal à te suivre, d'autant que ton premier exemple ne pollue pas l'espace global si il est dans un scope autre que le global.
Connais tu le fonctionnement de la déclaration de fonction (function statement) pour écrire cela ? par différence avec l'expression de fonction (function expression)
une déclaration de fonction fonctionne comme ceci :
ce qui distingue une déclaration de fonction d'une expression de fonction c'est que la première instruction d'une ligne est le mot-clé function.
Ton premier exemple est une déclaration (statement)
Sous cette forme déclarative, function est un raccourci d'une expression function. Ainsi le précédent code (la déclaration - le statement par opposition à l'expression de function) est transformé en :
var foo = function foo() {};
il y a un mécanisme de hoisting associé à var qui fait que la déclaration va être transformée en :
1 2 3
| var foo=undefined;
foo = function foo(){};
//ces 2 instructions sont remontées en haut du scope |
Le hoisting dans ce cas précis (statement - déclaration) ne remonte pas seulement le var xxx= undefined mais aussi la définition de la function.
J'entends par remonter, remonter au début du scope.
Précision sur le hoisting : une déclaration de fonction ne peut pas prendre place dans des structures conditionnelles par exemple. Le hoisting fera qu'elle sera de toute façon déclarée et affectée.
Ce que tu proposes, c'est exactement ce que fait un function statement (une déclaration de fonction), mais en plus avec la garantie du mécanisme de hoisting, garantie que tu n'auras pas en le faisant à la main. Essaie si tu veux pour reprendre ton exemple :
1 2
| function fred_constructor() {}
console.log(new fred_constructor()) |
ou alors j'ai pas compris où tu voulais en venir 
Alors sans prétention hein
( Ca fait peut-être 2 semaines que je connais ces notions) .... mais j'ai envie de te retourner la question

Envoyé par
Lcf.vs
Bonjour à tous,
Vous avez l'habitude de déclarer des fonctions... mais les connaissez-vous si bien que cela?
Partager