Estoy tratando de entender cómo funciona el cierre en Javascript. En la última línea, si ingreso sayHi("Hello"))("John Doe"), la consola mostrará "HelloJohn Doe" como se esperaba.
Ahora, si elimino ("John Doe"), ¿por qué la consola se queda en blanco en lugar de mostrar "Helloundefined"?
function sayHi(whattosay){ return function yolo(name) { console.log(whattosay + name) } } sayHi("Hello")Eso es porque aún necesita llamar a la función, incluso si no desea proporcionar el parámetro "nombre".
Prueba con: sayHi("whatever")()
¡y verás el resultado esperado!
lo que sea indefinido
Si omite el último par de paréntesis, solo está obteniendo una función que IMPRIMIRÍA el resultado esperado si la llamara, pero aún no la está llamando.
por lo que podría, por ejemplo, almacenar esa función devuelta en alguna variable y llamarla más tarde.
esto devolverá tu función interna yolo
function sayHi(whattosay){ return function yolo(name) { console.log(whattosay + name) } } sayHi("Hello")necesita llamar a la función yolo para ver su salida de console.log
function sayHi(whattosay){ return function yolo(name) { console.log(whattosay + name) } } sayHi("Hello")()incluso puede almacenar la función de retorno en una variable y llamarla
function sayHi(whattosay){ return function yolo(name) { console.log(whattosay + name) } } const yolo = sayHi("Hello") yolo()