Skip to content

Commit 0b97c15

Browse files
authored
Merge pull request #438 from joaquinelio/susy201029
Susy201029
2 parents a766c14 + a947397 commit 0b97c15

File tree

27 files changed

+100
-104
lines changed

27 files changed

+100
-104
lines changed

1-js/03-code-quality/02-coding-style/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ Aquí un ejemplo de un archivo `.eslintrc`:
328328
},
329329
"rules": {
330330
"no-console": 0,
331-
"indent": ["warning", 2]
331+
"indent": 2
332332
}
333333
}
334334
```

1-js/03-code-quality/06-polyfills/article.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# Polyfills
23

34
El lenguaje JavaScript evoluciona constantemente. Nuevas propuestas al lenguaje aparecen regularmente, son analizadas y, si se consideran valiosas, se agregan a la lista en <https://tc39.github.io/ecma262/> y luego avanzan hasta [specification](http://www.ecma-international.org/publications/standards/Ecma-262.htm).
@@ -22,7 +23,8 @@ En realidad, hay dos partes en Babel:
2223

2324
2. Segundo, el polyfill.
2425

25-
El transpiler reescribe el código, por lo que se cubren las características de la sintaxis. Pero para funciones nuevas tenemos que escribir un script especial que las implemente. JavaScript es un lenguaje muy dinámico, puede que los scripts no solo agreguen nuevas funciones, sino también modifiquen las funciones incorporadas, para que actúen de forma correspondiente al estándar moderno.
26+
Nuevas características del lenguaje pueden incluir no solo contrucciones sintácticas sino también funciones incorporadas.
27+
El transpilador reescribe el código, transformando las contrucciones sintácticas nuevas al viejo formato. Pero para funciones nuevas, necesitamos implementarlas. JavaScript es un lenguaje muy dinámico, los scripts pueden agregar o modificar cualquier función para que actúen acorde al estándar moderno.
2628

2729
Existe el término "polyfill" para scripts que "llenan"(fill in) el vacío y agregan las implementaciones que faltan.
2830

1-js/04-object-basics/03-garbage-collection/article.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Simple, los valores "alcanzables" son aquellos que son accesibles o se pueden ut
1313
1. Hay un conjunto base de valores inherentemente accesibles, que no se pueden eliminar por razones obvias.
1414

1515
Por ejemplo:
16+
1617
- Variables locales y parámetros de la función actual.
1718
- Variables y parámetros para otras funciones en la cadena actual de llamadas anidadas.
1819
- Variables Globales
@@ -22,7 +23,7 @@ Simple, los valores "alcanzables" son aquellos que son accesibles o se pueden ut
2223

2324
2. Cualquier otro valor se considera accesible si es accesible desde una raíz(root) por una referencia o por una cadena de referencias.
2425

25-
Por ejemplo, si hay un objeto en una variable local, y ese objeto tiene una propiedad que hace referencia a otro objeto, ese objeto se considera accesible. Y aquellos a los que hace referencia también son accesibles. Ejemplos detallados a seguir.
26+
Por ejemplo, si hay un objeto en una variable local, y ese objeto tiene una propiedad que hace referencia a otro objeto, ese objeto se considera accesible. Y aquellos a los que hace referencia también son accesibles. Ejemplos detallados a seguir.
2627

2728
Hay un proceso en segundo plano en el motor de JavaScript que se llama [recolector de basura] (https://es.wikipedia.org/wiki/Recolector_de_basura). Monitorea todos los objetos y elimina aquellos que se han vuelto inalcanzables.
2829

@@ -96,7 +97,9 @@ let family = marry({
9697
name: "Ann"
9798
});
9899
```
100+
99101
La función `marry` "casa" dos objetos dándoles referencias entre sí y devuelve un nuevo objeto que los contiene a ambos.
102+
100103
La estructura de memoria resultante:
101104

102105
![](family.svg)
@@ -178,12 +181,13 @@ Ahora los objetos que no se pudieron visitar en el proceso se consideran inalcan
178181

179182
![](garbage-collection-5.svg)
180183

184+
Podemos imaginar el proceso como derramar un enorme cubo de pintura desde las raíces, que fluye a través de todas las referencias y marca todos los objetos alcanzables. Los elementos que no queden marcados son entonces eliminados.
185+
181186
Ese es el concepto de cómo funciona la recolección de basura. El motor de JavaScript aplica muchas optimizaciones para que se ejecute más rápido y no afecte la ejecución.
182187

183-
Algunas de las optimizaciones
188+
Algunas de las optimizaciones:
184189

185-
- **Colección generacional** -- los objetos se dividen en dos conjuntos:
186-
"nuevos" y "antiguos". Aparecen muchos objetos, hacen su trabajo y mueren rápido, se pueden limpiar agresivamente. Aquellos que sobreviven el tiempo suficiente, se vuelven "viejos" y son examinados con menos frecuencia.
190+
- **Colección generacional** -- los objetos se dividen en dos conjuntos: "nuevos" y "antiguos". Aparecen muchos objetos, hacen su trabajo y mueren rápido, se pueden limpiar agresivamente. Aquellos que sobreviven el tiempo suficiente, se vuelven "viejos" y son examinados con menos frecuencia.
187191
- **Colección incremental** -- Si hay muchos objetos y tratamos de caminar y marcar todo el conjunto de objetos a la vez, puede llevar algún tiempo e introducir retrasos visibles en la ejecución. Entonces el motor intenta dividir la recolección de basura en pedazos. Luego las piezas se ejecutan una por una, por separado. Eso requiere una contabilidad adicional entre ellos para rastrear los cambios, pero tenemos muchos pequeños retrasos en lugar de uno grande.
188192
- **Recolección de tiempo inactivo** -- el recolector de basura trata de ejecutarse solo mientras la CPU está inactiva, para reducir el posible efecto en la ejecución.
189193

@@ -204,4 +208,5 @@ Un libro general "The Garbage Collection Handbook: The Art of Automatic Memory M
204208
Si estás familiarizado con la programación de bajo nivel, la información más detallada sobre el recolector de basura V8 se encuentra en el artículo [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
205209

206210
[V8 blog](http://v8project.blogspot.com/) también publica artículos sobre cambios en la administración de memoria de vez en cuando. Naturalmente, para aprender la recolección de basura, es mejor que se prepare aprendiendo sobre los componentes internos de V8 en general y lea el blog de [Vyacheslav Egorov](http://mrale.ph) que trabajó como uno de los ingenieros de V8. Estoy diciendo: "V8", porque se cubre mejor con artículos en Internet. Para otros motores, muchos enfoques son similares, pero la recolección de basura difiere en muchos aspectos.
211+
207212
El conocimiento profundo de los motores es bueno cuando necesita optimizaciones de bajo nivel. Sería prudente planificar eso como el siguiente paso después de que esté familiarizado con el idioma.

1-js/04-object-basics/04-object-methods/article.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ user.sayHi(); // ¡Hola!
3434

3535
Aquí simplemente usamos una expresión de función para crear la función y asignarla a la propiedad `user.sayHi` del objeto.
3636

37-
Entonces la llamamos. ¡El usuario ahora puede hablar!
37+
Entonces la llamamos con `user.sayHi()`. ¡El usuario ahora puede hablar!
3838

3939
Una función que es la propiedad de un objeto es denominada su *método*.
4040

@@ -160,14 +160,16 @@ let user = {
160160
let admin = user;
161161
user = null; // sobrescribimos para hacer las cosas evidentes
162162

163-
admin.sayHi(); // ¡oops! dentro de sayHi(), ¡Se usa el nombre viejo! ¡Error!
163+
*!*
164+
admin.sayHi(); // TypeError: No se puede leer la propiedad 'name' de null
165+
*/!*
164166
```
165167

166168
Si usamos `this.name` en vez de `user.name` dentro de `alert`, entonces el código funciona.
167169

168170
## "this" no es vinculado
169171

170-
En JavaScript, la palabra clave `this` se comporta de manera distinta a la mayoría de otros lenguajes de programación. Puede ser usado en cualquier función.
172+
En JavaScript, la palabra clave `this` se comporta de manera distinta a la mayoría de otros lenguajes de programación. Puede ser usado en cualquier función, incluso si no es el método de un objeto.
171173

172174
No hay error de sintaxis en el siguiente ejemplo:
173175

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Por ejemplo:
3535
```js run
3636
let user = {}; // El usuario no tiene dirección
3737

38-
alert( user && user.address && user.address.street ); // undefined (no error)
38+
alert( user.address && user.address.street && user.address.street.name ); // undefined (no error)
3939
```
4040

4141
Poniendo AND en el camino completo a la propiedad asegura que todos los componentes existen (si no, la evaluación se detiene), pero es engorroso de escribir.
@@ -113,17 +113,20 @@ Por ejemplo, `?.()` Se usa para llamar a una función que puede no existir.
113113
En el siguiente código, algunos de nuestros usuarios tienen el método `admin`, y otros no:
114114

115115
```js run
116-
let user1 = {
116+
let userAdmin = {
117117
admin() {
118118
alert("I am admin");
119119
}
120-
}
120+
};
121+
122+
let userGuest = {};
121123
122-
let user2 = {};
124+
*!*
125+
userAdmin.admin?.(); // I am admin
126+
*/!*
123127
124128
*!*
125-
user1.admin?.(); // I am admin
126-
user2.admin?.();
129+
userGuest.admin?.(); // nothing (no such method)
127130
*/!*
128131
```
129132

1-js/05-data-types/03-string/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ alert('Yo soy \'Walrus\''); // Yo soy 'Walrus'
110110

111111
Como puedes ver, debimos anteponer un caracter de escape `\` antes de cada comilla ya que de otra manera hubiera indicado el final del string.
112112

113-
Obviamente, eso se refiere sólo a las comillas que son iguales a las que están rodeando al string. Por lo que, una solución más elegante sería cambiar a comillas dobles o backticks:
113+
Obviamente, eso se refiere sólo a las comillas que son iguales a las que están rodeando al string. Una solución más elegante sería cambiar a comillas dobles o backticks:
114114

115115
```js run
116116
alert(`Yo soy "Walrus"`); // Yo soy "Walrus"

1-js/05-data-types/05-array-methods/2-filter-range/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 4
44

55
# Filtrar un rango
66

7-
Escribe una función `filterRange(arr, a, b)` que obtenga un array `arr`, busque los elementos entre `a` y `b` y devuelva un array con los resultados.
7+
Escribe una función `filterRange(arr, a, b)` que obtenga un array `arr`, busque los elementos con valor mayor o igual a `a` y menor o igual a `b` y devuelva un array con los resultados.
88

99
La función no debe modificar el array. Debe devolver un nuevo array.
1010

1-js/05-data-types/05-array-methods/8-sort-objects/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
```js run no-beautify
22
function sortByAge(arr) {
3-
arr.sort((a, b) => a.age > b.age ? 1 : -1);
3+
arr.sort((a, b) => a.age - b.age);
44
}
55

66
let john = { name: "John", age: 25 };

1-js/05-data-types/05-array-methods/article.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,13 +419,14 @@ Ahora sí funciona como esperábamos.
419419

420420
Demos un paso al costado un momento y pensemos que es lo que está pasando. El array `arr` puede ser un array de cualquier cosa, ¿no? Puede contener números, strings, objetos o lo que sea. Podemos decir que tenemos un conjunto de *ciertos items*. Para ordenarlos, necesitamos una *función de orden* que sepa cómo comparar los elementos. El orden por defecto es hacerlo como strings.
421421

422-
El método `arr.sort(fn)` implementa un algorito genérico de orden. No necesitamos preocuparnos de cómo funciona internamente (la mayoría de las veces es una forma optimizada del algoritmo [quicksort](https://es.wikipedia.org/wiki/Quicksort)). Este método va a recorrer el array, comparar sus elementos usando la función dada y, finalmente, reordenarlos. Todo los que necesitamos hacer es proveer la `fn` que realiza la comparación.
422+
El método `arr.sort(fn)` implementa un algorito genérico de orden. No necesitamos preocuparnos de cómo funciona internamente (la mayoría de las veces es una forma optimizada del algoritmo [quicksort](https://es.wikipedia.org/wiki/Quicksort) o [Timsort](https://en.wikipedia.org/wiki/Timsort)). Este método va a recorrer el array, comparar sus elementos usando la función dada y, finalmente, reordenarlos. Todo los que necesitamos hacer es proveer la `fn` que realiza la comparación.
423423

424424
Por cierto, si alguna vez queremos saber qué elementos son comparados -- nada nos impide ejecutar alert() en ellos:
425425

426426
```js run
427427
[1, -2, 15, 2, 0, 8].sort(function(a, b) {
428428
alert( a + " <> " + b );
429+
return a - b;
429430
});
430431
```
431432

@@ -700,7 +701,7 @@ alert(soldiers[1].age); // 23
700701

701702
Si en el ejemplo anterior usamos `users.filter(army.canJoin)`, entonces `army.canJoin` puede ser llamada como una función independiente, con `this=undefined`, lo que puede llevar a un error instantáneo.
702703

703-
La llamada a `users.filter(army.canJoin, army)` puede ser reemplazada con `users.filter(user => army.canJoin(user))` que realiza lo mismo. La forma anterior se usa más a menudo, ya que es un poco más fácil de entender.
704+
La llamada a `users.filter(army.canJoin, army)` puede ser reemplazada con `users.filter(user => army.canJoin(user))` que realiza lo mismo. Esta última se usa más a menudo ya que es un poco más fácil de entender.
704705

705706
## Resumen
706707

@@ -729,7 +730,7 @@ Veamos el ayudamemoria de métodos para arrays:
729730
- `sort(func)` -- ordena el array y lo devuelve.
730731
- `reverse()` -- ordena el array de forma inversa y lo devuelve.
731732
- `split/join` -- convierte una cadena en un array y viceversa.
732-
- `reduce(func, initial)` -- calcula un solo valor para todo el array llamando a la `func` para cada elemento y pasando un resultado intermedio entre cada llamada.
733+
- `reduce/reduceRight(func, initial)` -- calcula un solo valor para todo el array llamando a la `func` para cada elemento y pasando un resultado intermedio entre cada llamada.
733734

734735
- Adicional:
735736
- `Array.isArray(arr)` comprueba que `arr` sea un array.
@@ -741,6 +742,8 @@ Estos métodos son los más utilizados y cubren el 99% de los casos. Pero existe
741742
- [arr.some(fn)](mdn:js/Array/some)/[arr.every(fn)](mdn:js/Array/every) comprueba el array.
742743

743744
La función `fn` es llamada para cada elemento del array de manera similar a `map`. Si alguno/todos los resultados son `true`, devuelve `true`, si no, `false`.
745+
746+
Estos métodos se comportan con similitud a los operadores `||` y `&&`: si `fn` devuelve un valor verdadero, `arr.some()` devuelve `true` y detiene la iteración de inmediato; si `fn` devuelve un valor falso, `arr.every()` devuelve `false` y detiene la iteración también.
744747

745748
Podemos usar `every` para comparar arrays:
746749
```js run
@@ -755,6 +758,8 @@ Podemos usar `every` para comparar arrays:
755758

756759
- [arr.copyWithin(target, start, end)](mdn:js/Array/copyWithin) -- copia sus elementos desde la posición `start` hasta la posición `end` en *si mismo*, a la posición `target` (reescribe lo existente).
757760

761+
- [arr.flat(depth)](mdn:js/Array/flat)/[arr.flatMap(fn)](mdn:js/Array/flatMap) crea un nuevo array plano desde un array multidimensional .
762+
758763
Para la lista completa, ver [manual](mdn:js/Array).
759764

760765
A primera vista puede parecer que hay demasiados métodos para aprender y un tanto difíciles de recordar. Pero con el tiempo se vuelve más fácil.

1-js/05-data-types/08-weakmap-weakset/article.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# WeakMap y WeakSet
22

3-
4-
Como sabemos por el capítulo <info:garbage-collection>, el motor de JavaScript almacena un valor en la memoria mientras es accesible(y puede ser potencialmente usado).
3+
Como sabemos por el capítulo <info:garbage-collection>, el motor de JavaScript almacena un valor en la memoria mientras es accesible (y puede ser potencialmente usado).
54

65
Por ejemplo:
76
```js
@@ -31,7 +30,8 @@ let array = [ john ];
3130
john = null; // sobrescribe la referencia
3231

3332
*!*
34-
// John se almacena dentro del array, por lo que no será recolectado por el recolector de basura
33+
// El objeto referenciado por John se almacena dentro del array,
34+
// por lo que no será recolectado por el recolector de basura
3535
// Lo podemos obtener como array[0]
3636
*/!*
3737
```

0 commit comments

Comments
 (0)