2017-09-09 4 views
0

Je comprends la notion de passage d'une fonction en tant que variable en javascript - qu'il s'agisse d'une variable de fonction ou d'une fonction anonyme. Cependant, je ne comprends pas quand ou pourquoi une fonction devrait être exécutée en tant que paramètre au lieu de avant ou après l'appel de fonction primaire.Quelle est l'application pratique pour exécuter une fonction en tant que paramètre par opposition à avant/après l'appel de fonction initial?

Par exemple:

En supposant une fonction de rappel et une fonction privée sont créés -

function callback(y) { 
     alert(y); 
    } 

function foo(x, callback) { 
     alert(x); 
    } 

Quelle est la différence entre ces deux déclarations et quand peut-celui-ci un plus pratique que le premier?

foo(bar); 
callback(bas); 

ou

foo(bar, callback(bas)); 

Je suis sûr que ce n'est pas syntaxiquement correct, mais nous espérons qu'il illustre ce que je suis en train de transmettre.

En fin de compte, j'essaie de comprendre lorsque l'exécution d'une fonction en tant que paramètre est pratique.

+0

Les rappels sont généralement appelés de manière asynchrone. Les appeler de manière synchrone, après un appel à une fonction qui initie une opération asynchrone, annule le but d'attendre que l'opération asynchrone réussisse ou échoue. – traktor53

+0

"Callback" est un peu un abus de langage ici, je n'aurais probablement pas dû l'utiliser. Je suis juste arrivé à réaliser ce scénario tout en utilisant un rappel. Comme je l'ai dit, j'essaie finalement de comprendre quand et pourquoi une fonction devrait être exécutée en tant que paramètre par opposition à un appel de fonction indépendant - qu'il s'agisse d'un rappel ou non. – user2170742

+0

Copie possible de [Qu'est-ce qu'une fonction de rappel?] (Https://stackoverflow.com/questions/824234/what-is-a-callback-function) –

Répondre

1

Lorsque le langage permet de transmettre des fonctions comme n'importe quel autre objet, ils sont appelés fonctions de première classe. Ils donnent la possibilité de coder dans un nouveau paradigme de programmation appelé Programmation fonctionnelle.

Si le code est synchrone, alors il n'y aurait pas de différence dans l'ordre d'exécution de foo (bar) et rappel (bas)

Mais si la fonction foo est async et rappel est pas, si vous exécuter

foo(bar) 
callback(bas) 

callback serait exécuté d'abord et toto plus tard. Où comme si vous passez en argument, l'exécution du callback peut être retardée jusqu'à ce que foo soit exécuté.

Aussi callback serait en mesure d'accéder aux variables de la fonction foo() si elle est passée en argument en raison de la fermeture même après que foo() a terminé l'exécution.

+0

"Le callback peut également accéder aux variables de foo() function si elle est passée en argument à cause de la fermeture même après que foo() ait terminé l'exécution. " - Pour moi, cela semble être une raison exceptionnellement valable pour exécuter une fonction en tant que paramètre, ce qui est vraiment ce que j'essayais de comprendre. Merci de voir à travers le 'callback' et de reconnaître la confusion des fonctions exécutées par les paramètres. – user2170742

+0

Génial que cela a aidé :) – Vijay

0

Comme affiché, la fonction foo ne pas utiliser le paramètre callback, donc il n'y a pas de différence effective entre callback et foo.

Manquant, les rappels sont généralement appelés de manière asynchrone. Les appeler de manière synchrone, en code appelant, après un appel à une fonction qui initie une opération asynchrone, annule le but d'attendre que l'opération asynchrone réussisse ou échoue avant d'initier l'action de rappel.

Une indécision peut se produire si l'opération effectuée par une fonction d'opération munie d'un rappel (valeur de fonction) réussit d'une manière ou d'une autre à effectuer l'opération de manière synchrone. Le rappel doit-il être effectué de manière synchrone, avant que la fonction d'opération ne retourne, ou de manière asynchrone dans une boucle d'événement, après que la fonction d'opération est revenue à son appelant? Le modèle ECMAScript Promise est le dernier - rendre le callback de manière asynchrone, quelque temps plus tard.

+0

Est-ce que cela explique vraiment quand et pourquoi une fonction devrait/devrait être exécutée en tant que paramètre au lieu d'une fonction indépendante? Cela semble juste ajouter plus de confusion. – user2170742