[Javascript] Hilo General

Atuit

#209

échale un vistazo a este video.

1
B

Si entiendes bien lo que se expone en esta charla ya sabrás más que el 95% de jsartisans:

1
M

¿Alguna página de ejercicios donde pueda practicar diferentes algoritmos?

Me acabo de encontrar con un video de youtube donde hacen una "entrevista" a programador JS y el ejercicio iba de encontrar el número más alto y más bajo de un array pasado como parámetro.

Lo he intentado hacer por mi cuenta y no he podido.

Me gustaría encontrar ejercicios de este tipo para romperme la cabeza.

2 respuestas
TheBrotha

#213 Leetcode, Hackerrank... Dale caña, a mi por lo menos me resultan divertidos

2 1 respuesta
Dashielle

#213 Codewars

M

#214 #213
Muchas gracias.

He estado revisando las webs y me parecen super interesantes.

Pero tengo una duda....En una entrevista del estilo frontend donde te pidan JS, te preguntan ejercicios del estilo que estoy viendo en esas webs?

3 respuestas
TheBrotha

#216 En algunas en las que he estado me pidieron hacer una prueba de estas frente al entrevistador, compartiendo pantalla. Las easy asi que incluso si no te la preparas no pasa nada.

Por lo demás, suelen tirar mas de prueba práctica

1 respuesta
M

#217 Si, mas o menos es lo que imaginaba.

Me venía a referir que en una entrevista donde vas a postular como frontend JS/React para maquetar web app's, en la entrevista no te van a poner a crear un algoritmo para que muestres la secuencia Fibonacci por ejemplo, no?

1 respuesta
B

#216 Mírate las mierdas de js que al final no salen en la vida real como hoisting, prototypal inheritance, this y el scope (bind, call, arrow functions vs functions, var vs let/const). También temas que si se usan como closures, como asegurar imutabilitad con destructuring y los métodos que mutan y los que no.

Son tonterías pero a mi me han salido alguna vez.

2 respuestas
M

#219 muchas gracias!

1
TheBrotha

#218 para que te hagas una idea la unica prueba de leetcode que me han puesto varias veces es un FizzBuzz

En React en concreto te preguntarán por cosas de React, como que es el propdrilling y como evitarlo, para que sirve el return en una funcion useEffect, diferencia entre clases y hooks...

Y de JS lo que ha dicho #219

1
Dashielle

#216 Aparte de lo que te han comentado también suelen preguntar cosas (al menos a mi me lo hicieron) sobre asincronía, o que te pongan un trozo de código que tiene algún error y que expliques porqué está mal o temas de shallow copy/deep copy...

Si lo que quieres es preparar entrevistas de JS (especialmente frontend) te recomiendo este repo:

https://github.com/yangshun/front-end-interview-handbook

Zoko

Las preguntas que hago yo cuando entrevisto a candidatos (no las he decidido yo, pero son las que se hacen en mi empresa) para Frontend Engineers son de JS general, para saber que la persona sabe como funciona el lenguaje.
Son 5 preguntas que se hacen en un coderpad y son muy sencillitas, saber como funciona el lenguaje, asincronía, y como dice el amigo que completes una función o algo así.

Si el candidato ha pasado bien esa fase es entonces cuando ya mandamos el homework tecnico que hara el usuario por su cuenta, tras hacer eso lo revisamos con el en un peer programming.

Eso es la parte tecnica de nuestro proceso de seleccion.

1
11 días después
screechie

¿Lo de las closures es simplemente que todas las funciones declaradas dentro de una función "padre" tienen acceso al scope de esa función "padre"? ¿No hay nada más que deba saber?

He visto unas cuantas páginas donde ponen este concepto como algo complicado e igual me estoy perdiendo algo.

1 respuesta
EnderFX

#224 No es que tengan acceso, es que estás capturando ese valor en el momento en el que defines la función hija - y solo a las variables referenciadas, no a todo el scope.

Por ejemplo, el siguiente fragmento de código:

const outer = () => {
  let a = 0;
  const inner = () => {
    debugger;
  }
  inner();
}
outer();

Vale que es estúpido, pero si ejecutas eso en Chrome, tendrás un punto de ruptura dentro de la función inner. En la consola de chrome verás que no tienes acceso a la variable "a". ¿Por qué? Porque no está referenciada desde inner, y el motor de JS, al parsear la función, puede construirla sin necesidad de otros scopes (inner es una función pura).

Si dentro de inner, ahora, referencias a "a" (por ejemplo "console.log(a)") verás que dentro del punto de ruptura ya tienes acceso a "a". Eso es porque el motor ha construido la función inner, y ha visto que utiliza una referencia a una variable "a", que no está definida en ella. El motor empieza a recorrer los scopes "padre" de la función (en este caso, inner > outer > document), y encuentra "a" en "outer". Resultado: ahora el scope de "inner" está asociado con el scope "outer", porque la variable "a" está en dicho scope - y solo para eso, el resto de variables del scope de "outer" no estarán disponibles en el scope de "inner" a no ser que las referencies. Y ojo, que en tiempo de ejecución, la "a" de "inner" es la "a" de la función "outer" que la creó (solo esa, pues cada invocación a "outer" genera una nueva variable "a" a la que se asocia su propia copia de "inner" - entendiendo las referencias).

El tema de las closures es entenderlas: qué valor de "a" estás referenciando. Saber cómo, cuándo va a cambiar, y cuándo usar closures o no. En código limpio y FP (si intentas utilizar funciones puras) no deberías usar muchas closures, pero para ser un buen desarrollador de JS debes entenderlo, porque te las encuentras a menudo y no deja de ser un recurso más del lenguaje. Y como recurso viene muy bien en algunas situaciones.

5 1 respuesta
screechie

#225 Gracias por tomarte la molestia de escribir la explicación. Definitivamente se me estaban escapando bastantes detalles y me había quedado en lo básico :sweat_smile:

1 respuesta
EnderFX

#226 Si te interesan un poco más las tripas, siempre suele ser interesante ver cómo se implementan y qué pecularidades tienen las features en V8 (u otros engines de JS). Si no tienes problema con el inglés, y te sobra un buen rato, este artículo es interesante: https://mrale.ph/blog/2012/09/23/grokking-v8-closures-for-fun.html

PD: es un poco viejo el artículo, pero la mayoría de lo que dice debería seguir vigente o ser válido para entender las abstracciones y mecanismos del motor.

1
RedSpirit

Los artículos de este blog están bastante bien para empaparse de closures y this de cara a una entrevista, es 1 artículo de explicación y luego otro de preguntillas rollo las que pueden surgir en una entrevista

https://dmitripavlutin.com/simple-explanation-of-javascript-closures/
https://dmitripavlutin.com/javascript-closures-interview-questions/
https://dmitripavlutin.com/gentle-explanation-of-this-in-javascript/
https://dmitripavlutin.com/javascript-this-interview-questions/

1
7 días después
M

Alguien me podria indicar la diferencia entre estos dos codigos:

for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}

for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}

En var, el resultado es 3 3 3 y en let es 0 1 2, pero no entiendo la diferencia.

1 respuesta
RedSpirit

#229 Es porque las variables declaradas con const y let tienen scope de bloque.
Mirate la segunda pregunta de este repo y su respuesta:
https://github.com/lydiahallie/javascript-questions

1 respuesta
M

#230 muchisimas gracias

LzO

que curso recomiendan para javascript?? estoy haciendo un FP de DAW y ya saben el nivel... pesimo pero como me quiero dedicar a esto pues, estaba dudando en hacer el de helsinki que ademas se da react, etc o algún otro como Escuela IT, alguno de udemy... etc . estoy abierto a sugerencias...

1 respuesta
bwkz

#232

Gratuitos:

  • The Odin Project
  • Fullstackopen (este es durillo si eres muy novato)

Udemy:

  • Jonas Schmedtmann

Si te sobra la pasta:

  • Frontend Masters
1 1 respuesta
LzO

#233 Perfecto gracias, conozco todos ellos, solo que el tener tantos recursos, no termino por decantarme por uno jaja.

El de Odin lo empecé hace unos años y nunca lo acabé.
El de Helsinki que mencionas, de fullstackopen me han dicho que es muy bueno.
El de Jonas está gratis a través de hidevs.net y lo estaba haciendo y Frontend Masters lo conocí hace 2 semanas y tiene una pinta increíble también.

Tienes alguna reseña de Escuela IT ?? tiene un catálogo bueno también pero no encuentro ninguna reseña por ahí.

Gracias.

1 respuesta
SupermaN_CK
5
Carrefour
const array1 = [...array2]

Ayer perdí un rato averiguando porqué cojones cuando cambiaba el valor de array2 también se cambiaba el de array1 si estaba haciendo la copia con el spread operator. Pués resulta que con arrays bidimensionales solo copia por valor el primer nivel, los siguientes los hace por referencia y cuando hacía array2[x][y]=0 también se modificaba el array1.
Solución que encontré:

JSON.parse(JSON.stringify(numbers))

o

const clone = (items) => items.map(item => Array.isArray(item) ? clone(item) : item)
1 respuesta
EnderFX

#236 es lo lógico. Estas haciendo un spread de los elementos. Si los elementos son referencias, las referencias son las mismas, es el array el que no es el mismo. Lo que necesitas es un deep clone o un map, como bien dices

1 respuesta
Carrefour

#237 Pero haciendo la copia con el spread operador, en teoría es deep clone.

a = [1,2,3]
(3) [1, 2, 3]
b = [...a]
(3) [1, 2, 3]
b[0] = 11
11
b
(3) [11, 2, 3]
a
(3) [1, 2, 3]

Por eso me volví un poco loco cuando lo modificaba, entendía que en un array bidimensional funcionaria igual.

4 respuestas
B

#238 Los números y otros tipos son "inmutables"... por lo que cuando asignas un valor realmente lo que estás haciendo es crear una nueva región en la memoria con ese valor y asignando la nueva referencia.

JohnVoiden

#238 Pues justo en las documentaciones oficiales te especifican que solo es el primer nivel que haces deep clone.