27 votes

Syntaxe javascript inhabituelle

Quelqu'un pourrait-il m'expliquer ce qui se passe à la deuxième ligne ?

var foo = function(){alert("hello?")};
(0,foo)();

38voto

Kos Points 29125

L'infâme expression de la virgule a,b évalue les deux arguments et renvoie la valeur de l'expression de droite.

Donc, dans ce cas, c'est exactement la même chose que foo(); .

Voici un meilleur exemple qui vous aidera à comprendre ce qui se passe :

function foo() {
    print("foo called");
    return 123;
}
function bar() {
    print("bar called");
    return 456;
}
var result = (foo(), bar());
print("result:", result);

Salida:

foo called
bar called
result: 456

De même, l'expression de la virgule peut être confondue avec la virgule délimitant les arguments de la fonction. Ce n'est pas la même chose ! Notez la différence :

print("result:", foo(), bar() ); // 3 arguments, no comma operator
print("result:", (foo(), bar()) ); // 2 arguments, comma operator

9voto

tborychowski Points 3920

Il évalue les deux expressions dans la première parenthèse et exécute la seconde (dans ce cas - une fonction).

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator

2voto

C5H8NNaO4 Points 4435

Puisque l'opérateur virgule en javascript évalue plusieurs opérandes et renvoie le dernier. MDN :

L'opérateur virgule évalue ses deux opérandes (de gauche à droite) et renvoie la valeur du second opérande.

Votre expression (0,foo)

renvoie à foo qui est ensuite invoquée par la paranthèse, placée après elle.

1voto

La virgule évaluera les opérandes et retournera le dernier.

la deuxième ligne renverra foo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X