68 votes

Fermeture vs fonction Anonyme (différence?)

Doublons Possibles:
Qu'est-ce que les Fermetures/Lambda en PHP ou Javascript en termes simples?
Quelle est la différence entre une "fermeture" et un "lambda'?

Salut,

J'ai été incapable de trouver une définition qui explique clairement les différences entre une clôture et une fonction anonyme.

La plupart des références que j'ai vu clairement spécifier qu'ils sont distincts des "choses" mais je n'arrive pas à obtenir ma tête autour de pourquoi.

Quelqu'un pourrait-merci de le simplifier pour moi? Quelles sont les différences entre ces deux fonctions du langage? Lequel est le plus approprié dans ce cas?

94voto

Anurag Points 66470

Une fonction anonyme est juste une fonction qui n'a pas de nom; rien de plus. Une fermeture est une fonction qui capture l'état de l'environnement qui l'entoure.

Une fonction anonyme n'a pas nécessairement besoin de créer une fermeture, et une fermeture n'est pas créé uniquement pour les fonctions anonymes.

Considérer cette hypothétique contre-exemple. Envisager une langue Foo qui ne supporte pas de fermetures, mais prend en charge les fonctions anonymes. Cette langue peut ne pas compiler ou de jeter une erreur pour le code ci-dessous parce que "salut" n'est pas défini dans le cadre de l'intérieur de la fonction. Le fait qu'il est anonyme, n'est pas pertinent.

function outer() {
    var greeting = "hello ";

    (function(name) {
        alert(greeting + name);
    })("John Doe");
}

Considérons un réel maintenant le langage qui prend en charge les fermetures - JavaScript. En prenant le même exemple que ci-dessus, mais la nomination de la fonction interne cette fois donne:

function outer() {
    var greeting = "hello ";

    (function inner(name) {
        alert(greeting + name);
    })("John Doe");
}

Bien que la fonction interne n'est pas anonyme plus, elle capte encore de l'état de l'environnement qui l'entoure.

Fermetures de fournir beaucoup plus besoin de commodité, car sinon, nous serions en passant chaque dépendance de la fonction en tant qu'argument.

function outer() {
    var greeting = "hello ";

    (function(name, greeting) {
        alert(greeting + name);
    })("John Doe", greeting);
}

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