A continuación se muestra un código que demuestra una variable local estática en C/C++. El contador se agregaría cada vez que se llame a btnTestOnclick; el contador se puede acumular.
void btnTestOnclick() { static int counter = 0; counter++; }Pero en el siguiente código JS,
function btnTestOnclick() { class temp{ static counter=0; }; console.log(temp.counter); temp.counter+=1; }Este contador temporal no se puede acumular, cada vez que es 0. Sé que mover la clase temporal fuera de la función funcionaría, pero se supone que esta clase es lógicamente local ya que solo btnTestOnclick la usaría.
¿Cómo piensas sobre ello?
Necesita un cierre donde se crea la variable persistente solo visible para btnTestOnclick . Use una expresión de función invocada inmediatamente .
const btnTestOnclick = (() => { let counter = 0; return () => { counter++; // do other stuff with counter? }; })(); Dicho esto, personalmente considero que los IIFE están un poco desactualizados hoy en día. Si la sección de código en la que está escribiendo esto es tal que tiene miedo de que agregar otra variable a su alcance ( counter ) haga que las cosas sean más confusas de lo que sería ideal, es probable que sea hora de extraer parte de ese código en una independiente módulo
let counter = 0; export const btnTestOnclick = () => { counter++; // do other stuff with counter? }; donde el archivo anterior no contiene nada más (y, por lo tanto, el counter está claramente limitado solo al btnTestOnclick exportado)