61 votes

Appeler vs invoquer une fonction

Jusqu'à ce point, j'ai pensé à "appeler" et "invocation" une fonction signifiait la même chose. Cependant, dans un YouTube tutoriel il a dit d'appeler une fonction en l'appelant. Ma première pensée a été que le libellé était une erreur, mais sur W3Schools' page sur l'Invocation de la Fonction, il dit:

Il est courant d'utiliser le terme "appeler une fonction" au lieu de "appeler un la fonction" ... Dans ce tutoriel, nous allons utiliser invoquer, parce qu'un Fonction JavaScript peut être invoquée sans être appelé.

Ok, il y a une différence. Quel est-il?

38voto

WereWolf - The Alpha Points 49671

Votre texte de référence:

Il est courant d'utiliser le terme "appeler une fonction" au lieu de "appeler un la fonction" ... Dans ce tutoriel, nous allons utiliser invoquer, parce qu'un Fonction JavaScript peut être invoquée sans être appelé.

Maintenant, permettez-moi de reformuler:

Il est courant d'utiliser le terme "appeler une fonction" au lieu de "appeler un la fonction" ... Dans ce tutoriel, nous utiliserons the term invoquer instead of call, en raison d'une Fonction JavaScript peut être invoquée indirectly comme fn.call() et fn.apply() sans être appelés, directly comme fn().

Donc, quand j'en fn(), il est appelé directement et quand je le fais comme fn.call(), il est invoqué de façon indirecte mais dans les deux cas, la fonction est appelée. Sinon, je ne vois pas de différence ici, et je peux aussi dire que je peux appeler une fonction dans de nombreuses façons, par exemple:

fn(); // I'm calling it
fn.call(); // I'm calling it
fn.apply(); // I'm calling it

Donc, la différence sémantique, mais les deux sont interchangeables, de l'OMI. BTW, j'ai écrit un commentaire ci-dessus, en vertu de la question et je voudrais le mettre ici, qui est:

IMO, c'est une fausse déclaration. Peut-être il ya une certaine indication de appel/appliquer ou quelque chose d'autre, mais c'est totalement déroutant.

25voto

Brett Commandeur Points 312

La différence, c'est de la sémantique et de la subtilité. Lorsque vous appelez une fonction, vous êtes directement en lui disant d'exécuter. Lorsque vous appelez une fonction, vous laissez quelque chose de l'exécuter.

Il y a une façon d'appeler une fonction:

myFunction()

Ici, vous êtes à l'invocation de la fonction (en le laissant courir) en l'appelant directement.

Il existe de nombreuses façons d'appeler une fonction (donné dans les différents commentaires et réponses). Voici un exemple:

function invoker(functionName) {
  functionName() 
}

invoker(myFunction)

Ici, en appelant invoker, vous êtes en invoquant myFunction, qui est appelé indirectement.

5voto

hygull Points 2386

Oui, dans la plupart des cas, nous utilisons à la fois de reporter l'exécution d'une fonction.

Il existe 2 façons d'atteindre la place de B à partir de votre DOMICILE.

  1. Direct/Automatique (Appeler), c'est à dire si vous choisissez la première façon, vous n'avez pas besoin de marcher. Quelqu'un vous mènera automatiquement à l'endroit B.
  2. Façon indirecte (Appel), c'est à dire si choisir la deuxième façon, vous avez seulement besoin de parvenir à Un(par pied). Quelqu'un est-il au lieu d'Une pour vous à la place de B.

Jetez un oeil à l'image ci-dessous. Je pense que ça va effacer vos doutes.

Dans le cas de l' Appelant, vous l'origine se référer à la déclaration qui appelle la fonction.

Dans le cas de l'Invocation, vous indirectement de l'instruction d'appel à invoquer/exécution de la fonction.

3voto

Nirmal Dalmia Points 118

Beaucoup de gens utilisent le terme de l'appel et de l'invocation de manière interchangeable, mais ce n'est pas juste. Il y a une très légère différence entre l'appel et l'appel d'une fonction. En JavaScript, les fonctions peuvent être appelées sans être appelé, ce qui signifie que le code à l'intérieur du corps de la fonction peut être exécutée sans la création d'un object pour la même chose. Elle est liée à l'objet global. Quand il n'y a aucun objet en particulier, la valeur de this est associée à l'objet global.

Il y a aussi une différence entre call et apply, la différence fondamentale est que call() accepte une liste d'arguments, tout en s'appliquer() accepte un seul tableau d'arguments. Un autre this objet peut être attribuée lors de l'appel d'une fonction existante. this fait référence à l'objet courant, l'objet appelant. Avec call, vous pouvez écrire une méthode une fois et puis hériter d'un autre objet, sans avoir à réécrire la méthode pour le nouvel objet.

Ainsi, la principale différence entre l'appel et l'appel est livré en termes de this objet. D'appel vous permet de définir l' this de la valeur alors qu'en invoquant simplement le lie à l'objet global.

-2voto

Ilan Keshet Points 383

"fonction invoquée" signifie qu'une fonction a été exécutée

"fonction appelée" signifie qu'une fonction a été appelée par une autre fonction puis exécutée

"fonction invoquée sans être appelée" est une fonction qui a été invoquée sans être appelée par une autre fonction

 example of a self invoking function calling another function:
var f = (function() { 
   foo();
})();  ///() here means it self invoked -- without being called directly.

var foo = (function() {
    ///Do something here
});
 

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