Non, ils sont identiques.
Cependant, si vous ajoutez new
à l'avance et .something
après, ils seront différents.
Code 1
new (function() {
this.prop = 4;
}) ().prop;
Ce code crée une nouvelle instance de la classe de cette fonction, puis obtient l'adresse de l'utilisateur. prop
de la nouvelle instance.
Il retourne 4
.
C'est l'équivalent de
function MyClass() {
this.prop = 4;
}
new MyClass().prop;
Code 2
new ( function() {
return { Class: function() { } };
}() ).Class;
Ce code appelle new
sur le Class
propriété.
Comme les parenthèses de l'appel de fonction se trouvent à l'intérieur du jeu de parenthèses extérieur, elles ne sont pas prises en compte par la fonction new
et, à la place, appeler la fonction normalement, en renvoyant sa valeur de retour.
Le site new
L'expression est analysée jusqu'au .Class
et l'instancie. (les parenthèses après new
sont facultatifs)
C'est l'équivalent de
var namespace = { Class: function() { } };
function getNamespace() { return namespace; }
new ( getNamespace() ).Class;
//Or,
new namespace.Class;
Sans les parenthèses autour de l'appel à getNamespace()
ce qui serait interprété comme (new getNamespace()).Class
- il appelle l'instanciation de la getNamespace
et retourner la classe Class
de la nouvelle instance.