1
00:00:01,330 --> 00:00:02,590
ahora hablemos de

2
00:00:02,590 --> 00:00:06,020
una propiedad fundamental del lenguaje JavaScript.

3
00:00:06,020 --> 00:00:09,970
Que es el hecho de que tiene funciones de primera clase.

4
00:00:09,970 --> 00:00:13,730
Esto nos permite escribir funciones de orden superior.

5
00:00:13,730 --> 00:00:15,800
¿Pero de qué se trata todo eso?

6
00:00:15,800 --> 00:00:17,093
Bien, veamos.

7
00:00:18,640 --> 00:00:23,030
Entonces, JavaScript es un lenguaje que tiene funciones de primera clase.

8
00:00:23,030 --> 00:00:24,690
que en términos técnicos

9
00:00:24,690 --> 00:00:28,930
significa que las funciones son los llamados primeros ciudadanos.

10
00:00:28,930 --> 00:00:31,420
En la práctica, eso significa que las funciones

11
00:00:31,420 --> 00:00:34,310
simplemente se tratan como valores.

12
00:00:34,310 --> 00:00:36,650
Y ya tocamos esa idea.

13
00:00:36,650 --> 00:00:38,400
un par de veces antes,

14
00:00:38,400 --> 00:00:41,860
pero esta es una característica tan importante del lenguaje

15
00:00:41,860 --> 00:00:46,240
que vale la pena pasar más tiempo hablando de esto.

16
00:00:46,240 --> 00:00:49,810
Ahora, ¿por qué JavaScript funciona de esta manera?

17
00:00:49,810 --> 00:00:52,260
Bueno, es simplemente porque las funciones

18
00:00:52,260 --> 00:00:56,300
son realmente otro tipo de objetos en JavaScript.

19
00:00:56,300 --> 00:00:58,700
Y como los objetos son valores,

20
00:00:58,700 --> 00:01:01,120
Las funciones también son valores.

21
00:01:01,120 --> 00:01:03,220
Y como las funciones son valores,

22
00:01:03,220 --> 00:01:05,123
hay un monton de cosas interesantes

23
00:01:05,123 --> 00:01:06,760
que podemos hacer con ellos,

24
00:01:06,760 --> 00:01:10,420
como almacenarlos en variables o propiedades de objetos.

25
00:01:10,420 --> 00:01:11,270
Y eso, por supuesto,

26
00:01:11,270 --> 00:01:14,560
ya lo hicimos un par de veces antes.

27
00:01:14,560 --> 00:01:17,850
Así que los valores de la función aquí están marcados en rojo,

28
00:01:17,850 --> 00:01:20,420
y luego verás, creamos una expresión de función

29
00:01:20,420 --> 00:01:23,510
en el primer ejemplo y un método de objeto

30
00:01:23,510 --> 00:01:25,510
en el segundo ejemplo.

31
00:01:25,510 --> 00:01:27,580
Así que el valor en el rectángulo rojo

32
00:01:27,580 --> 00:01:29,650
es el valor de la función en sí,

33
00:01:29,650 --> 00:01:32,640
que podemos guardar donde queramos.

34
00:01:32,640 --> 00:01:37,330
También podemos pasar funciones como argumentos a otras funciones.

35
00:01:37,330 --> 00:01:39,850
Y de hecho ya lo hicimos antes

36
00:01:39,850 --> 00:01:42,980
al agregar detectores de eventos o controladores de eventos

37
00:01:42,980 --> 00:01:45,000
a los objetos tontos.

38
00:01:45,000 --> 00:01:47,580
Así que aquí tenemos la función de añadir detector de eventos.

39
00:01:47,580 --> 00:01:49,000
que ya sabes,

40
00:01:49,000 --> 00:01:51,240
y claramente pasamos la función de saludar

41
00:01:51,240 --> 00:01:53,350
en la función de agregar nota de la lista de eventos

42
00:01:53,350 --> 00:01:55,910
aquí como un valor, ¿verdad?

43
00:01:55,910 --> 00:01:58,550
Ahora, para hacerlo aún más interesante,

44
00:01:58,550 --> 00:02:02,720
también podemos devolver una función desde otra función.

45
00:02:02,720 --> 00:02:04,220
Eso suena un poco loco,

46
00:02:04,220 --> 00:02:06,113
pero puede ser muy útil.

47
00:02:06,970 --> 00:02:10,850
Finalmente, recuerda que las funciones son objetos.

48
00:02:10,850 --> 00:02:15,400
Y muchos tipos de objetos en JavaScript tienen métodos, ¿verdad?

49
00:02:15,400 --> 00:02:18,140
Como métodos de matriz, por ejemplo.

50
00:02:18,140 --> 00:02:21,210
Y en realidad también hay métodos de función.

51
00:02:21,210 --> 00:02:24,310
Entonces métodos que podemos llamar a funciones.

52
00:02:24,310 --> 00:02:27,510
Entonces, de nuevo, eso suena un poco loco, ¿verdad?

53
00:02:27,510 --> 00:02:30,140
Pero veremos cómo usar esto a nuestro favor.

54
00:02:30,140 --> 00:02:32,230
a lo largo de esta sección.

55
00:02:32,230 --> 00:02:35,110
Este método de enlace aquí es un ejemplo de eso.

56
00:02:35,110 --> 00:02:38,510
Y nuevamente, aprenderemos sobre el método bind.

57
00:02:38,510 --> 00:02:40,013
a medida que avanzamos en la sección.

58
00:02:40,990 --> 00:02:42,000
Está bien.

59
00:02:42,000 --> 00:02:46,010
Ahora, el hecho de que JavaScript tenga funciones de primera clase

60
00:02:46,010 --> 00:02:48,970
hace posible que usemos y escribamos

61
00:02:48,970 --> 00:02:51,400
funciones de orden superior.

62
00:02:51,400 --> 00:02:53,520
Entonces una función de orden superior

63
00:02:53,520 --> 00:02:56,410
es una función que recibe otra función

64
00:02:56,410 --> 00:02:57,870
como argumento,

65
00:02:57,870 --> 00:03:01,490
o una función que devuelve una nueva función.

66
00:03:01,490 --> 00:03:04,460
Así que echemos un vistazo a ambos tipos aquí.

67
00:03:04,460 --> 00:03:07,860
Primero, para funciones que reciben otra función.

68
00:03:07,860 --> 00:03:10,890
tenemos el mismo ejemplo que antes.

69
00:03:10,890 --> 00:03:13,210
Así que aquí, la función de agregar detector de eventos

70
00:03:13,210 --> 00:03:15,510
es la función de orden superior.

71
00:03:15,510 --> 00:03:16,770
¿Y por qué?

72
00:03:16,770 --> 00:03:21,300
Bueno, porque recibe otra función como entrada.

73
00:03:21,300 --> 00:03:23,960
En este caso, la función de saludo.

74
00:03:23,960 --> 00:03:27,150
Y solemos decir que la función que se pasa en

75
00:03:27,150 --> 00:03:29,370
es una función de devolución de llamada.

76
00:03:29,370 --> 00:03:32,850
Eso es porque la función de devolución de llamada se llamará más tarde.

77
00:03:32,850 --> 00:03:35,220
por la función de orden superior.

78
00:03:35,220 --> 00:03:36,210
En este caso,

79
00:03:36,210 --> 00:03:39,680
agregar el detector de eventos llamará a la devolución de llamada de saludo más tarde

80
00:03:39,680 --> 00:03:42,490
tan pronto como ocurra el evento de clic.

81
00:03:42,490 --> 00:03:44,297
Es como la función de saludo que dice:

82
00:03:44,297 --> 00:03:46,830
"Hola, no me saludes todavía,

83
00:03:46,830 --> 00:03:49,580
pero llámame una vez que estés listo".

84
00:03:49,580 --> 00:03:51,900
Y esto funciona, no sólo en el contexto

85
00:03:51,900 --> 00:03:54,100
de la función de añadir detector de eventos,

86
00:03:54,100 --> 00:03:57,100
pero también en muchos otros casos de uso.

87
00:03:57,100 --> 00:03:58,740
Bien, segundo,

88
00:03:58,740 --> 00:04:02,890
también podemos tener funciones que devuelvan otra función.

89
00:04:02,890 --> 00:04:05,690
Así que aquí tenemos la función de orden superior.

90
00:04:05,690 --> 00:04:08,160
Así que básicamente todo este bloque de código,

91
00:04:08,160 --> 00:04:10,520
que claramente devuelve una nueva función,

92
00:04:10,520 --> 00:04:12,200
cual es este

93
00:04:12,200 --> 00:04:13,760
Y este estilo de funciones

94
00:04:13,760 --> 00:04:16,270
también se usa mucho en JavaScript.

95
00:04:16,270 --> 00:04:18,210
Pero también es más avanzado,

96
00:04:18,210 --> 00:04:20,820
y supongo que más difícil de entender.

97
00:04:20,820 --> 00:04:23,070
Te lo mostraré en la próxima lección,

98
00:04:23,070 --> 00:04:26,130
pero exploraremos esto más profundamente un poco más tarde.

99
00:04:26,130 --> 00:04:27,480
Ahora, solo para terminar,

100
00:04:27,480 --> 00:04:29,620
parece haber cierta confusión entre

101
00:04:29,620 --> 00:04:33,610
funciones de primera clase y funciones de orden superior.

102
00:04:33,610 --> 00:04:36,550
Algunas personas piensan que son lo mismo.

103
00:04:36,550 --> 00:04:39,800
Pero en realidad significan cosas diferentes.

104
00:04:39,800 --> 00:04:43,220
Entonces, las funciones de primera clase son solo una característica

105
00:04:43,220 --> 00:04:47,300
que un lenguaje de programación tiene o no tiene.

106
00:04:47,300 --> 00:04:50,870
Todo lo que significa es que todas las funciones son valores.

107
00:04:50,870 --> 00:04:52,040
Eso es todo.

108
00:04:52,040 --> 00:04:55,800
No hay funciones de primera clase en la práctica, ¿de acuerdo?

109
00:04:55,800 --> 00:04:57,910
Es solo un concepto.

110
00:04:57,910 --> 00:05:01,870
Sin embargo, existen funciones de orden superior en la práctica,

111
00:05:01,870 --> 00:05:04,880
que son posibles porque el lenguaje soporta

112
00:05:04,880 --> 00:05:07,010
funciones de primera clase.

113
00:05:07,010 --> 00:05:08,660
Así que es una diferencia sutil,

114
00:05:08,660 --> 00:05:11,800
pero aún así vale la pena señalar si quieres poder hablar

115
00:05:11,800 --> 00:05:14,003
como un verdadero maestro de JavaScript.

116
00:05:14,870 --> 00:05:15,980
Excelente.

117
00:05:15,980 --> 00:05:17,310
Ahora, en la próxima conferencia,

118
00:05:17,310 --> 00:05:21,033
vamos a crear o poseer funciones de orden superior.