2
Quelle est la différence entre une fermeture et une fermeture imbriquée? Une bonne explication avec des exemples serait utile.Quelle est la différence entre une fermeture et une fermeture imbriquée?
Quelle est la différence entre une fermeture et une fermeture imbriquée? Une bonne explication avec des exemples serait utile.Quelle est la différence entre une fermeture et une fermeture imbriquée?
Portée des variables et de l'environnement auquel elles sont liées.
Et comment dur, ils sont à mettre en œuvre dans un compilateur :)
ClosureA peut être lié à sa portée locale LA et parent-champ PA, puis une fermeture à l'intérieur qui a appelé ClosureB est lié à (potentiellement) LB, LA, PA
func a(v1,v2,v3){
closure_b(bv1, bv2, bv3) { # Closure
b_local1 = bv1
b_local2 = v1 # parent scope
closure_c(cv1, cv2) { # Nested closure has 'closure_b's scope too
c_local1 = cv1
c_local2 = bv1 # direct-parent scope
c_local3 = v1 # parent's parent scope (nesting)
c_local4 = b_local2
}
return closure_c;
}
return closure_b(); # closure_b() returns closure_c
}
Je suis tout dans votre code jusqu'à la déclaration de retour. Je ne pensais pas que closure_c était accessible en dehors de closure_b. Pouvez-vous expliquer comment closure_c peut être retourné à partir de la portée de func a? Ou la déclaration de retour dans cet exemple est-elle incorrecte? – adamjcooper
Typo dans mon cas, va corriger. –
Super, merci pour l'exemple utile. – adamjcooper