
Luis Gerardo Colmenares
PreguntaLeyendo detalladamente este articulo https://medium.com/dailyjs/i-never-understood-javascript-closures-9663703368e8 me surge la siguiente duda en relación a esta clase:
No está mal referido el ámbito léxico al que se refiere el profesor?
Según el artículo, el ámbito léxico se refiere a las variables que han sido definidas en su contexto de llamada. En este caso, a mi parecer, el ámbito léxico lo encuentras en el global scope debido a que “myCount()” es llamada en ese scope. Creo que es un concepto que no aplica al ejemplo que explica en la clase.
Puede que el profesor haya querido decir esto que expongo pero no lo entendí así. Creo que falta mucho más detalle en cómo funciona cada paso que toma JavaScript para hacer funcionar los closures.
-
Clousure: una funcion dentro de otra funcion.
-
Variable privada: variable que solo puede ser llamada dentro de su ambito lexico.
-
Metodo publico:funcion que puede ser llamada desde cualquier parte siempre. sin embargo en esta ocacion se requiere de una instancia para poder llamarla

Andrea Lozano Cataño
Para leer el artículo en español solo hacemos clic derecho >> traducir en español.

Héctor Eduardo López Carballo
Escribí esto: Closures como "global scopes" chiquitos. Según yo explica por qué sí funciona lo que el profesor dice. . Básicamente cuando el profesor hace que el return de
buildCount
return displayCount
myCount
Robinson Matias Aguilar Bascuñan
intentare explicarte lo mas detallado lo que sucede con este metodo para que puedas entenderlo mejor, seguiremos el mismo ejemplo de la clase, con el siguiente ejemplo.
const reserveHotel(count){ let food=count const reserveFood = () => { console.log(food++) } return reserveFood } const packHotel = new reserveHotel() packHotel() packHotel()
Bien. ahora antes de empesar, te explicare de que va el ejemplo.
La idea es que se pueda hacer una reserva al hotel, que solo viene incluido 1 comida por reserva, sin embargo el hotel te da la factibilidad de poder comprar mas comida aparte una vez tengas reservada tu hotel. _________________________________--
Bueno ahora te explicare de que va el codigo.
El código de ejemplo. se compone de un clousure. que contiene una emulación de variable privada y un método publico que es intanseado para poder se llamado y ejecutado.
para el que no le queda claro la definicion de cada concepto lo describiré levemente.
Bien ahora te explicare realmente que sucede en el código.
si te pones a analizar bien el código ves que hay una función llamada reserveHotel, esta función actuara como instanciadora. ¿porque?. porque al hacer..
const packHotel =new reserveHotel(1) //instanciando con el valor 1
estoy ejecutando la función reserveHotel() y esta me retornara algo. ¿pero que es?. bueno si nos fijamos linea a linea vemos que al principio hay una variable food y que esta esta tomando el valor que se esta pasando por parametro. es decir..
count
y nosotros le pasamos a count el valor 1 . Bueno después el código sigue ejecutándose y vemos que hay una función llamada reserveFood que dentro simplemente lo que hace es hacer un console.log(food++) imprimiento la cantidad de comidas +1 que vendría siendo la reserva que se le agrega por el llamado a esa función.
Despues hay un retorno. ahh pero esta retornando una funcion y a la ves ejecutandola que es reserveFood().
entonces hagamos un recuento hasta aqui. al instanciar reserveHotel(1) se almacena el valor 1 en la variable food y luego ejecuta la función reserveFood() que consolea food +1 una ves hace eso guarda esos valores como referencia en la función publica packHotel y terminando el ciclo.
HASTA AQUí ES IMPORTANTE SABER QUE FOOD ACTUALMENTE NO VALE NADA. EL VALOR 1 COLOCADO CUANDO SE INSTANCIÓ. LO ÚNICO QUE HACE ES DECIR QUE CADA VES QUE SE LLAME A LA FUNCION packHotel() que en realidad no es mas que la función reserveFood() guardada en la constante packHotel. UTILIZARA ESE VALOR 1 COMO REFERNCIA PARA IR AGREGANDORE EN CADA LLAMADA.
Siguiendo ahora lo único que resta es la llamada a la funcion packHotel(), la cual en el ejemplo es llamada 2 veces. entonces al llamarla esta tomara el valor referenciado en la instancia que seria 1 por lo tanto en cada llamada se guardaría el valor y se va sumando.
packHotel() //1 packHotel() // 2
La clave de todo eso es en realidad la variable privada food. la cual solo pueden acceder a ella la funcion reserveFood(). y es que esta es instanciada y guardada con el valor pasado por parámetro que estará siempre en esa instancia.
Ojala se haya entendido lo mas posible y te haya servido de algo. (hasta yo me enrede un poco mientras escribía. XD) cualquier cosa ya sea corrección o duda que tengas. no dudes en hacerla.
Robinson Matias Aguilar Bascuñan
Todavía no entiendo bien el ingles para poder leer el articulo que mostraste efectivamente y decirte si esta en lo correcto o no. Con respecto a tu verdadera, no se si se establece en como funcionan los clousures o el tema del ámbito léxico dentro de un clousure