Il s'agit d'un objet littéral dans l'instruction de retour. C'est comme si l'on créait un objet et qu'on le renvoyait :
var obj = {
func1: func1,
func2: func2,
func3: func3
};
return obj;
La syntaxe de l'objet littéral crée un objet et définit ses propriétés, tout comme :
var obj = new Object();
obj.func1 = func1;
obj.func2 = func2;
obj.func3 = func3;
return obj;
Le renvoi de l'objet a pour but de révéler les fonctions à l'intérieur de la fonction au code extérieur, tout en créant un espace pour les variables privées que les fonctions peuvent utiliser.
Si l'on n'utilise pas de variables privées, le code fait la même chose que :
var Test = {
func1: function() {
//do something.....
},
func2: function() {
//do something.....
},
func3: function() {
//do something.....
}
};
Les variables privées sont déclarées à l'intérieur de la portée de la fonction et ne peuvent être atteintes que par les fonctions qui s'y trouvent. Exemple : les variables privées sont déclarées à l'intérieur de la portée de la fonction :
var Test = (function () {
var name;
function setName(str) {
name = str;
}
function getName() {
return name;
}
return {
setName: setName,
getName: getName
};
})();
Test.setName("John Doe");
var name = Test.getName();