¡Te damos la bienvenida a este reto!

1

¡Bienvenido al mundo de JavaScript!

Día 1

2

Variables, funciones y sintaxis básica

3

Tipos de datos

4

Playground - Retorna el tipo

5

Tipos de datos - pt 2

Día 2

6

Operadores

7

Hoisting y coerción

8

Playground - Calcula la propina

9

Alcance de las variables

Día 3

10

Condicionales

11

Playground - Calcula años bisiestos

12

Switch

13

Playground - Obten información de mascotas según su tipo

14

Ciclos

15

Playground - Dibuja un triangulo

Día 4

16

Arrays

17

Playground - Encuentra al michi mas famoso

18

Objetos

19

Playground - Obten el promedio de los estudiantes

Día 5 - Checkpoint

20

Playground - encuentra el palindromo más grande

Día 6

21

Reasignación y redeclaración

22

Modo estricto

Día 7

23

Debugging y manejo de errores

24

Programación funcional

Quiz: Día 7

Día 8

25

Closures

26

Playground - Crea una calculadora con closures

27

Higher order functions

28

Playground - Crea tu propio método map

Día 9

29

ECMAScript

30

TC39

Quiz: Día 9

Día 10 - Checkpoint

31

ES6

32

ES7

33

Playground - Task planner

Día 11

34

Asincronismo

35

Playground - Promesas

36

Manejando el asincronismo

37

Playground - Resuelve el callback hell usando promesas

38

Playground - Resuelve el callback hell usando async/await

Día 12

39

Arrays a profundidad

40

Métodos de arrays: Every, Find y findIndex

41

Playground - Válida el formulario

Día 13

42

Métodos de arrays: Includes, Join y concat

43

Playground - agrupa los productos

44

Métodos de arrays: Flat y FlatMap

45

Playground - Encuentra la ubicación del valor buscado

Día 14

46

Mutable functions

47

Playground - Modifica una lista de compras

48

Métodos de arrays: sort

49

Playground - Ordena los productos

Día 15 - Checkpoint

50

Playground - Sistema de reservaciones de un hotel

Día 16

51

Programación orientada a objetos en JavaScript

52

Objetos literales

53

Playground - Congela el objeto recursivamente

Día 17

54

Prototipos en JavaScript

55

Playground - Modifica el prototype de los arrays

56

Playground - Crea un auto usando clases

Día 18

57

Abstracción en JavaScript

58

Playground - Sistema de carrito de compras

59

Encapsulamiento en JavaScript

60

Playground - Encapsula datos de los usuarios

Día 19

61

Herencia en JavaScript

62

Playground - Jerarquía de animales

63

Polimorfismo en JavaScript

64

Playground - Sistema de pagos

Día 20 - Checkpoint

65

Playground - Agenda de vuelos

Live Class

66

30 días de JS con Juan DC

67

30 días de JS con Nicobytes

Closures

25/67

Lectura

Los closures en JavaScript son una característica fundamental del lenguaje que permite a las funciones recordar el estado de su entorno de ejecución, incluso después de que la función haya sido invocada. Esto permite a las funciones mantener un estado privado y protegido de variables y funciones internas, lo que proporciona una mayor flexibilidad y seguridad en el código.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Hoy quiero hablarles sobre uno de los conceptos más interesantes en JavaScript: los closures.


.
Un closure es una función que guarda referencias a variables en su entorno léxico, incluso después de que la función ha sido devuelta. Esto significa que una función que se define dentro de otra función (la función interna) tiene acceso a las variables de la función externa (el ámbito léxico).
.
En términos más simples, un closure permite que una función acceda a variables que no están dentro de su propio ámbito. Esto es útil para crear funciones más flexibles y reutilizables.
.
Ejemplo:

function sumar(a) { // función declarativa que recibe un parámetro 'a'
  return function(b) { // rotorno de función anónima que recibe un parámetro 'b'
    return a + b; // esa función retorna la suma de 'a' y 'b'
  }
}
// declaración de variables con llamadas de función 'sumar' y un parámetro 'a'
let suma1 = sumar(5);
let suma2 = sumar(10);

console.log(suma1(2)); // devuelve 7
console.log(suma2(3)); // devuelve 13

En este ejemplo, sumar() es una función que devuelve otra función. La función interna es el closure, y tiene acceso a la variable a de la función externa.
.
Al llamar a sumar(5), se crea un closure que guarda el valor de a como 5. Luego, al llamar a suma1(2), la función interna suma 2 al valor de a (5) y devuelve 7.
.
De manera similar, al llamar a sumar(10), se crea otro closure que guarda el valor de a como 10. Luego, al llamar a suma2(3), la función interna suma 3 al valor de a (10) y devuelve 13.

Contador me imagino que sea counter intercambio de idioma jijij

Una cuestión que me costó entender en el primer ejemplo es por qué la variable count no se inicializa a 0 cada vez que se llama a la variable myCounter dado que existe la linea

let count = 0;

Mi interpretación después de un buen rato razonando, es que cuando se ejecuta

const myCounter =counter();

básicamente lo que sucede es que se inicializa count=0, se devuelve la función increment() y se almacena en la variable myCounter. Por lo tanto esta ultima variable es igual a increment(), por lo que llamar a myCounter() es exactamente lo mismo que llamar a increment(). En este caso existe una variable guardada en memoria bajo el nombre count, y cada vez que se llama a myCounter (o increment), este espacio se sobreescribe y es por eso que el output de la función cambia.

Por favor corríjanme si alguien tiene un conocimiento más verídico de lo que sucede detrás de la ejecución del script. Gracias

arreglen el typo en “contador”, creo que deberia haber sido counter

Se me hizo complicado entenderlo.

1.- La función principal se resuelve y mantiene su estado.
2.- La función que se retorna se guarda en la variable a la que lo asignes con el estado.
3.- Podemos usar la variable que contiene a la función secundaria para hacer cosas.

creo que toca practicar mas, a ver cuando se necesitan usar este tipo de funciones…