Вопрос №556 от пользователя Daniel Newman в уроке «Замыкания в JavaScript», курс «Введение в Javascript»

Daniel Newman

Очень внезапное задание для материала. Если бы не пример Madzohan, хотя почему Array.prototype.slice.call(arguments) говорит только и именно о аргументах функции внутри функции и где всё это время хранится мультиплаер - нужно, видимо, поискать. Без полезной ссылки тут никто ничего не решит - мало материала лекции. Еще раз спасибо.

18 3

Александр-C Вагин

Добрый день!

Спасибо за отзыв, но, к сожалению, я вас не понял :)

Попробуйте перефразировать ;)

0

Daniel Newman

Смог понять, лишь прочитав дополнительно момент с замыканием в MDN, дополнив прочтенное материалом г-на Кантора на данную тему и задав вопрос в toster. Сложным был момент с передачей аргументов функции-замыканию, возвращаемой "верхней" функцией в качестве ссылки. Материал не самый простой для усвоение с наскока, и требует либо еще одной лекции, что бы закрыть тему, либо большего числа вводных или дополнительных "примитивных" практик. Могу ошибаться, конечно, т.к. не много комментариев к теме видно от других участников. Может проблема только во мне. )

3

Александр-C Вагин

В любом случае, вы поняли материал, и даже пришлось самому что-то где-то покопать ;)

1

Kat

прямо "мечтала" о таких курсах, в которых чтобы решить задание нужно самому найти решение в интернете. Покопаться я могла и сама, занимаясь самообразованием и не оплачивая лекции. Посмотрев лекцию и почитав материал под ссылками ниже, так и не смогла понять как выполнить задание.

0

Kirill Mokevnin

Насчет этого курса по JS вы правы, он действительно был записан достаточно давно, когда мы считали что самостоятельная работа помогает. Она конечно помогает, но практика показала тоже что и вы сейчас пишите. Ценность онлайн курсов в том чтобы получить все в одном месте. У нас в планах переделать этот курс именно так в будущем.

4

Kat

Спасибо за ответ Просто долго мучилась с этим заданием, и расстраивалась, а оказалось, что лекции и ссылок недостаточно для решения, а об этом нигде и не сказано.

0

Арман Кобжасаров

На самом деле не нужно ссылаться на сторонние материалы. Внимательно пересмотрите часть предыдущей лекции, а именно про arguments и все станет на свои места)))

1

user-0f57cca524626bd3

Нашел решение задания, но не знаю, как его встроить в него - решил его в своем редакторе, там работает. Выводит производное умноженное на среднее арифметическое. Но в задании очень странная конструкция.

function generateAverageMultiplier(mult){

return function(a){
        a = 0;
        for(var i=0; i < arguments.length; i++)             {
            a = a + arguments[1];
        }
    return (a/arguments.length) * mult;
};

}

var a1 = generateAverageMultiplier(2);

console.log(a1(3, 3));

0

user-0f57cca524626bd3

И еще вопрос:

В задании задается 7, как первый множитель и среднее арифметическое от чисел (1, 3, 5), как второй множитель.

Среднее арифметическое: 1 + 3 + 5 = 9, 9 / 3 = 3 Произведение: 7 * 3 = 21

Насколько я понимаю проверяется равно ли полученное из функции число 30:

assert.equal(averageTenMultiplier(1, 3, 5), 30);

0

Арман Кобжасаров

Вы нашли где-то в интернете или сами написали? К тому же, оно не правильное.

0

user-0f57cca524626bd3

Сам написал. Использовал пример из лекции про аргументы

0

Арман Кобжасаров

а почему arguments[1]?

0

user-0f57cca524626bd3

Опечатка - там i

0

user-0f57cca524626bd3

Код написано по образу вот этого примера:

https://developer.mozilla.org/ru/docs/Web/JavaScript/Closures

function makeAdder(x) { return function(y) { return x + y; }; }

var add5 = makeAdder(5); var add10 = makeAdder(10);

console.log(add5(2)); // 7 console.log(add10(2)); // 12

Добавил туда подсчет среднего арифметического из лекции про аргументы.

Правда, когда изменил на i перестало работать, странно.

0

user-0f57cca524626bd3

Поправил функцию свою. Теперь работает, как часы:

function generateAverageMultiplier(mult){
    var averageMultiplier = function(){

        return function(){
                summ = 0;
                for(var i=0; i < arguments.length; i++)             {
                    summ += arguments[i];
                }
            return (summ/arguments.length) * mult;
        };
    }
    return averageMultiplier();
}

var a1 = generateAverageMultiplier(7);

console.log(a1(2, 4, 8, 2));    //28

var a2 = generateAverageMultiplier(10);

console.log(a2(1, 3, 5));    //30

var a2 = generateAverageMultiplier(13);

console.log(a2(1, 2, 3));    //26

Но встроить в задание по-прежнему никак не удается

0

Арман Кобжасаров

лишняя фигурная скобка конце кода выше у тебя

0

Арман Кобжасаров

function generateAverageMultiplier(mult){ return function(a){ a = 0; for(var i=0; i < arguments.length; i++) { a = a + arguments[i]; } return (a/arguments.length) * mult; } return averageMultiplier; }

0

user-0f57cca524626bd3

Да, убрал. Спасибо большое. Но код по-прежнему не работает в терминале и работает в редакторе.

1

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
1 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
1 июня 5 месяцев