36 votes

Quelle est la signification de ce code (0, fonction) en javascript

J'ai trouvé ce code dans le code, il ressembler à ceci:

(0, function (arg) { ... })(this)

Après j'essaie de jouer comme ci-dessous,

(0, function (arg) { console.log(arg) })(2);
console.log((0, 1, 2, 3));
(0, function plus1 (arg) { console.log(arg + 1) }, function plus2 (arg) { console.log(arg + 2) })(5);

J'ai trouvé qu'il retournera toujours le dernier élément dans le support.

Je me demande quel est le nom de ce modèle de programmation et ce qui est le cas d'utilisation?

35voto

Oriol Points 20803

Dans ce cas particulier, il semble superflu, mais parfois, cette approche est utile.

Par exemple, avec eval:

(function() {
  (0,eval)("var foo = 123"); // indirect call to eval, creates global variable
})();
console.log(foo);            // 123
(function() {
  eval("var bar = 123");     // direct call to eval, creates local variable
})();
console.log(bar);            // ReferenceError

Il est également utile lorsque vous souhaitez appeler une méthode sans passer l'objet en tant que this valeur:

var obj = {
  method: function() { return this; }
};
console.log(obj.method() === obj);     // true
console.log((0,obj.method)() === obj); // false

À noter également que, selon le contexte, il peut être, les arguments séparateur à la place d'un opérateur virgule:

console.log(
  function(a, b) {
    return function() { return a; };
  }
  (0, function (arg) { /* ... */ })(this)
); // 0

4voto

Aaron Points 1857

exemple typique pourrait être,

for(var i=0,j=10; i < j; i++){
 // code ...
}

opérateur virgule permettrait d'évaluer des expressions de gauche à droite et de retourner le résultat de la plus à droite de l'expression

// e.g.

var a = 1, b= 2, c = 3, d = function(){ console.log("a => " +  a) }()

2voto

Joseph Shih Points 512

C'est un opérateur virgule enveloppé avec un auto-exécution de la fonction anonyme. Cependant, je n'ai aucune idée pourquoi le sens 0 a été inclus, sauf pour la dissimulation de l' fins.

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