Me gustaría codificar algo como esto.
function cokeDispencer(id) { const dict = {1:"sprite", 2:"pepcy", ...} // Some JSON. It might be bigger. return dict[id]; }Por supuesto, dict[id] es una forma mucho más sencilla de hacer lo mismo, pero quiero poner el objeto dict dentro de la función para que ninguna otra función pueda acceder a este objeto dict. Lo que me pregunto es que el objeto dict se inicializa cada vez que llama. Como sé, la función escrita en C/C++ inicializa su variable local cada vez que llama, excepto la variable estática. Si es así, ¿hay alguna forma de inicializar la variable const solo una vez como la variable estática C/C++?
Sí, está creando un nuevo objeto dict cada vez que se ejecuta esa función.
En su lugar, puede crear un IIFE : una función que se ejecuta inmediatamente y se "cierra" sobre el objeto y puede devolver una función que accede a la propiedad deseada.
const cokeDispencer = (() => { const dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. return id => dict[id]; })(); console.log(cokeDispencer(1));Esto es casi lo mismo que
const dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. const cokeDispencer = id => dict[id]; console.log(cokeDispencer(1)); excepto que el IIFE se asegura de que solo la función cokeDispener tenga acceso al objeto.
Si desea crear el objeto solo la primera vez que se llama a la función, y no antes, puede usar una técnica bastante similar para asignar una variable con alcance solo a la función si es necesario.
const cokeDispencer = (() => { let dict; return (id) => { if (!dict) { dict = {1:"sprite", 2:"pepcy"} // Some JSON. It might be bigger. } return dict[id]; }; })(); console.log(cokeDispencer(1));