Vous aussi pourriez perdre un temps bête...

Je fais du Javascript depuis des années et j'ose dire que je connais bien le sujet.
Pourtant aujourd'hui j'ai perdu un temps bête sur une erreur "inédite" que j'aurais pourtant pu rencontrer 1000 fois.

J'ai l'habitude de déclarer mes fonctions sans les faire suivre d'un point virgule.

Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
MaClasse.prototype.maFunction = function() {
     ...
}

Ayant l'habitude de coder en C# et PHP, rajouter un ";" après la déclaration me semble juste superflu.

J'ai aussi l'habitude de tirer partie des closures.

Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
(function() {
    var inClosure = 1;
    ...
})()

Le problème est quand la déclaration d'une fonction est succédé par une parenthèse ouvrante.

Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
MaClasse.prototype.maFunction = function() {
     ...
}
 
(function() {
    var inClosure = 1;
    ...
})()

Car ici, pour javascript ce qui est écrit est :

Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// MaClasse.prototype.maFunction = résultat de l'appel à la fonction
MaClasse.prototype.maFunction = function() {
     ...
// "}" suivit par "appel avec paramètre"  suivit par "appel sansparamètre" 
} (function() { ... }) ()

En conclusion, il faut mettre des points virgules.

Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
MaClasse.prototype.maFunction = function() {
     ...
};
 
(function() {
    var inClosure = 1;
    ...
})();