Persistência de escopo em closures


A persistência de dados em uma closure permite que um valor sobreviva ao fim da execução da função que o originou.

Considere o fluxo:

(defn messenger-builder [greeting]
  (fn [who] (println greeting who)))
  1. Uma função externa é chamada com um argumento (ex: "Hello").
  2. Uma função interna (fn) é criada e captura esse argumento.
  3. A função externa termina e seu escopo “morre”, mas a função interna é retornada.
  4. Ao invocar a função retornada futuramente, ela ainda possui acesso ao valor "Hello".

Exemplo:

(def hello-er (messenger-builder "Hello"))

Ao chamar (hello-er "world!"), o resultado será "Hello world!" porque o vínculo foi preservado.

Referências


https://clojure.org/guides/learn/functions#_closures