Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

JavaScript Bucles en JavaScript Trabajar con Bucles 'for' El Desafío de Refactorización - Código Duplicado

¿Cómo estás llamando value() como una función dentro de randomRGB(value) si no es una función?

Dentro de la función randomRGB(value), defines la variable const color como una plantilla literal que interpola el argumento value, pero añades () lo que la hace parecer una función.

¿Cómo funciona esto?

Tengo la misma pregunta:

function randomRGB(value) { rgb (${value()}, ${value()}, ${value()},) return color;

Mi pregunta es que no se ha creado una función value() y ¿cómo funciona value() en este tipo de situación?

Steven Parker
Steven Parker
244 163 puntos

Tony Shangkuan - siempre crea una pregunta nueva en lugar de hacer una pregunta como comentario o respuesta a otra pregunta, ya que esto generalmente solo será visto por el autor original y los que responden.

Veo que hiciste esto como una pregunta separada, puedes ver mi respuesta allí.

4 respuestas

Steven Parker
Steven Parker
244 163 puntos

Cuando se llama a randomRGB en el programa principal, el argumento que se le pasa es randomValue, que es el nombre de una función. Entonces, durante la función randomRGB, el nombre del parámetro "value" es igual a "randomValue", lo que significa que pueda puede ser llamado como una función.

Cuando una referencia de función se pasa como argumento a otra función, esto a menudo se denomina "callback".

¿Cómo se está pasando el argumento randomValue a él? Entiendo que está obteniendo ese valor, solo no entiendo qué hace que randomRGB reciba el randomValue que se le pasa. Para mí parece que sería un bucle roto de value intentando dar a los otros tres valores un valor de value. Llevo en este video aproximadamente 5 horas y me está haciendo cuestionarme si puedo terminar este curso.

Steven Parker
Steven Parker
244 163 puntos

Quizás esto ayude:

const randomValue = () => Math.floor(Math.aleatorio()*256);

función valores randomRGB(valor) {
//                 ^^^^^
//                 Este nombre de parámetro (value) se convertirá en
//                 una referencia a la función randomValue.
  const color = `rgb( ${valor()}, ${valor()}, ${valor()} )`;
//                      ^^^^^^      ^^^^^^     ^^^^^^
//                      Cada llamada a value() será en realidad
//                      una llamada a randomValue() y será
//                      reemplazada por un número.
  return color;
}

para (let i=1; i<=10; i++) {
  html += `<div style="background-color: ${valores randomRGB(randomValue)}">${i}</div>`;
//                                                   ^^^^^^^^^^^
//                             Aquí, randomValue se está pasando como argumento.
//                             Esto pasa una REFERENCIA a la función pero no la llama.
}

Steven Parker Entonces, cuando añadimos el (randomValue) en la parte inferior, entonces pasa su argumento al randomRGB anterior. ¿Por qué no añadir este argumento desde el principio en lugar de (value)? ¿Es algo que aprendimos antes y simplemente no lo estoy entendiendo?

Steven Parker
Steven Parker
244 163 puntos

No estoy seguro de entender la pregunta. Por favor, muéstrame cómo se vería el código si "añades este argumento desde el principio".

No importa, no puedo entender esto.

Steven Parker
Steven Parker
244 163 puntos

Si me muestras lo que estás preguntando con código, probablemente pueda explicarlo. Pero la idea básica es que cuando pasas un nombre de función como argumento, la función no se llama en ese momento. Pero cuando la otra función a la que se le pasó llama a su parámetro (añadiendo paréntesis al nombre), then se llama.

Derek Craig
sello-máscara
.a{fill-rule:evenodd;}techdegree
Derek Craig
JavaScript Full Stack Estudiante de Techdegree 3.318 Puntos

Creo que la confusión podría ser que esta línea se parece a `randomValue parece una variable porque eso es lo que me confundió.

const randomValue = () => Math.floor(Math.random() * 256);

Entonces, randomRGB(randomValue) usa randomValue cada vez value() se utiliza.

for ( let i = 1; i <= 10; i++ ) {
  html += `<div estilo=background-color: ${randomRGB(randomValue)}>${i}</div>`;
}