"component1.toLowerCase не является функцией" + проблемы с пониманием функций высшего порядка: / - PullRequest
0 голосов
/ 06 июля 2019

Я недавно начал изучать javascript, и у меня возникают проблемы с пониманием функций более высокого порядка и функций обратного вызова.

Итак, я попытался создать некоторый код, в котором мне нужно было бы использовать их или где они были бы эффективными, но я просто не могу понять это.

const iceCreamFlavors = ["Strawberry", "Chocolate", "Vanilla", "Caramel"];

const giveIceCream = (mixedFlavors) => {
  console.log(`Here you go, I've made a ${mixedFlavors()} icecream for you.`);
}

const mixStuff = (component1, component2) => component1.toLowerCase() + " and " + component2.toLowerCase();

const randomChoice = () => iceCreamFlavors[Math.floor(Math.random()*iceCreamFlavors.length())];

giveIceCream(mixStuff(randomChoice, randomChoice));

Результат должен быть следующим: «Ну вот, я приготовил для вас мороженое $ {mixedFlavors ()}».Где смешанные варианты будут двумя случайными вариантами из массива, но я получаю сообщение об ошибке, что component1 не является функцией, так что я немного запутался ...

РЕДАКТИРОВАТЬ:

const giveIceCream = mixedFlavors => console.log(`Here you go, I've made a ${mixedFlavors} icecream for you.`);

const mixStuff = (component1, component2) => component1().toLowerCase() + " and " + component2().toLowerCase();

const randomChoice = () => iceCreamFlavors[Math.floor(Math.random()*iceCreamFlavors.length)];

giveIceCream(mixStuff(randomChoice, randomChoice));

Я исправил то, что хотел сделать, спасибо всем ^^

1 Ответ

0 голосов
/ 06 июля 2019

Пожалуйста, проверьте код.Я упомянул ошибки и улучшения здесь.

const iceCreamFlavors = ["Strawberry", "Chocolate", "Vanilla", "Caramel"];

const giveIceCream = (mixedFlavors) => {
    console.log(`Here you go, I've made a ${mixedFlavors} icecream for you.`);
}

const mixStuff = (component1, component2) => {
    return component1.toLowerCase() + " and " + component2.toLowerCase();
}

/**
 * Get random number between length of array and 0
 */
const randomChoice = () => {
    // Return the random element from array
    return iceCreamFlavors[Math.floor(Math.random() * (iceCreamFlavors.length)) + 0];
}

/**
 * 1. While calling the function: mixStuff, you missed to pass two parameters. Instead you
 * passed only one, that too as a variable. You cannot pass a function as a variable. You
 * have to pass a function with paranthesis
 * 
 * 2. You did not use any return keyword in function, so the value was never returned from function,
 * It returned undefined, and thus undefined.toLowerCase() is not a function because it is not a string.
 * 
 * 3. In giveIceCream function, in order to use the ${mixedFlavors()}, you have to use ` and not ' for console.log.
 * Also mixedFlavors is a parameter, so you need not put any () to print that.
 * Please watch the code carefully.
 * 
 * 4. Array length is not a function. It is a value. so you can use it directly. 
 * Array.length is correct. Array.length() is wrong.
 * 
 * Thanks and happy coding :)
 */

giveIceCream(mixStuff(randomChoice(), randomChoice()));
...