¿Qué es el cierre js?

Definición: Un cierre es una función que puede leer variables dentro de otras funciones. En javascript, solo las subfunciones dentro de una función pueden leer variables locales, por lo que los cierres pueden entenderse como "funciones definidas dentro de una función". En esencia, un cierre es un puente que conecta el interior de una función con el exterior de una función. (La aplicación más típica de un cierre es implementar una función de devolución de llamada (callback)).

instancia de cierre

function foo(a) {
  var b = a + 1;
  function bar(c) {
    console.log(a, b, c);
  }
  return bar;
}
let result = foo(1);
result(3);
//控制台打印1,2,3

Podemos ver en el ejemplo anterior. La función bar está anidada en la función foo, y luego ejecutar foo devuelve la función bar, y luego ejecutar el resultado de llamar a foo realmente ejecuta bar, y finalmente la función bar se ejecutará y generará 123

De hecho, el ejemplo anterior en realidad crea un cierre, porque la variable resultado fuera de la función foo se refiere a la barra de funciones dentro de la función foo. Es decir, cuando la barra de función interna de la función foo es referenciada por una variable externa a la función foo, se crea un cierre.

¿De qué sirven los cierres?

En resumen, la función del cierre es que después de que foo termine de ejecutarse y regrese, el cierre evita que el mecanismo de recolección de basura de Javascript recupere los recursos ocupados por foo, porque la ejecución de la barra de funciones interna de foo depende de las variables en foo. 

En el ejemplo anterior, debido a la existencia del cierre, después de que la función foo regresa, c en bar siempre existe, de modo que cada vez que se ejecuta result(3), la función bar acepta 3 y luego genera a, b, c

Entonces imaginemos otra situación, si foo no devuelve la barra de función, la situación es completamente diferente. Porque después de ejecutar foo, bar no se devuelve al mundo exterior de foo, sino que solo foo hace referencia a él, y en este momento, foo solo hará referencia a foo, por lo que las funciones a y b se refieren entre sí pero no se alteran. por el mundo exterior (referenciado por el mundo exterior), se reciclarán las funciones foo y bar.

Escenario de aplicación

  1. Acceder a variables dentro de funciones

  1. mantener las variables en la memoria

Inconvenientes y soluciones de los cierres

  • Después de ejecutar la función, las variables locales en la función no se liberan y el tiempo de uso de la memoria será más largo.

  • propenso a pérdidas de memoria

resolver

Si puede usarlo, no lo use o utilícelo para establecerlo en nulo

Supongo que te gusta

Origin blog.csdn.net/weixin_56661658/article/details/128749434
Recomendado
Clasificación