web-dev-qa-db-fra.com

Quelle est la différence entre les fonctions anonymes et en ligne en JavaScript?

Le titre résume ma question. Un exemple qui démontre le point serait Nice.

19
matori82

Tout d'abord, il ne semble pas y avoir de définition de consensus pour les fonctions en ligne en JavaScript. Je considère qu'une fonction en ligne est un cas particulier d'une fonction JavaScript. Une fonction inline est une fonction affectée à une variable qui est créée au moment de l'exécution plutôt qu'au moment de la configuration.

Les fonctions anonymes et les fonctions en ligne sont pratiquement les mêmes, car elles sont créées au moment de l'exécution. La différence est qu'une fonction en ligne est affectée à une variable et peut donc être réutilisée. De cette façon, les fonctions en ligne fonctionnent de la même manière qu'une fonction régulière.

Une fonction

function func() {
    alert ('function');
} 

$('a').click(func);

Fonction en ligne

var func = function() { 
    alert ('inline') 
};

$('a').click(func);

Fonction anonyme

$('a').click(function() {
    alert('anonymous');
});

Les fonctions anonymes et en ligne peuvent avoir des pénalités de performance par rapport à une fonction régulière. Voir var functionName = function () {} vs function functionName () {} .

28
Daniel Gimenez

La fonction en ligne est quelque peu différente, citant wikipedia:

une fonction en ligne est une fonction sur laquelle le compilateur a été invité à effectuer une expansion en ligne. En d'autres termes, le programmeur a demandé au compilateur d'insérer le corps complet de la fonction à chaque endroit où la fonction est appelée, plutôt que de générer du code pour appeler la fonction au seul endroit où elle est définie. Les compilateurs ne sont pas tenus de respecter cette demande.

Javascript ne prend pas en charge le concept de fonction en ligne. Mais j'ai trouvé quelques références sur le web où des rappels comme:

(function(){
  setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();

sont appelés fonction en ligne. Comme vous pouvez le voir, ces fonctions n'ont pas de nom non plus, elles sont donc essentiellement les mêmes que les fonctions anonymes. Je pense que, puisque vous définissez la fonction où vous l'utilisez, elle est référencée par la fonction inline mais le nom "fonction anonyme" décrit le mieux la notion.

5
CSStudent

Les fonctions anonymes sont définies comme ceci

var x = 1;
(function(x){
    // Do something
    console.log(x); // 1
})(x);

Cependant, la définition de la fonction en ligne n'est pas claire pour moi.

2
jhnlsn

Fonction en ligne

var foo = function (){ 
   alert('Hello') 
}
setTimeout(foo, 100);

Fonction anonyme

setTimeout(function(){ 
   alert('Hello') 
}, 100);

Ils font la même chose, mais la fonction en ligne est meilleure lorsque vous souhaitez la réutiliser. Anonyme est bon pour une utilisation unique car vous n'avez pas à vous inquiéter si son nom entrera en conflit avec d'autres variables, et il est plus court.

Cela dépend donc de votre situation.

1
Chokchai