Вопрос №556 от пользователя Daniel Newman в уроке «Замыкания в JavaScript», курс «Введение в Javascript»
Очень внезапное задание для материала. Если бы не пример Madzohan, хотя почему Array.prototype.slice.call(arguments)
говорит только и именно о аргументах функции внутри функции и где всё это время хранится мультиплаер - нужно, видимо, поискать. Без полезной ссылки тут никто ничего не решит - мало материала лекции. Еще раз спасибо.
Добрый день!
Спасибо за отзыв, но, к сожалению, я вас не понял :)
Попробуйте перефразировать ;)
Смог понять, лишь прочитав дополнительно момент с замыканием в MDN, дополнив прочтенное материалом г-на Кантора на данную тему и задав вопрос в toster. Сложным был момент с передачей аргументов функции-замыканию, возвращаемой "верхней" функцией в качестве ссылки. Материал не самый простой для усвоение с наскока, и требует либо еще одной лекции, что бы закрыть тему, либо большего числа вводных или дополнительных "примитивных" практик. Могу ошибаться, конечно, т.к. не много комментариев к теме видно от других участников. Может проблема только во мне. )
В любом случае, вы поняли материал, и даже пришлось самому что-то где-то покопать ;)
прямо "мечтала" о таких курсах, в которых чтобы решить задание нужно самому найти решение в интернете. Покопаться я могла и сама, занимаясь самообразованием и не оплачивая лекции. Посмотрев лекцию и почитав материал под ссылками ниже, так и не смогла понять как выполнить задание.
Насчет этого курса по JS вы правы, он действительно был записан достаточно давно, когда мы считали что самостоятельная работа помогает. Она конечно помогает, но практика показала тоже что и вы сейчас пишите. Ценность онлайн курсов в том чтобы получить все в одном месте. У нас в планах переделать этот курс именно так в будущем.
Спасибо за ответ Просто долго мучилась с этим заданием, и расстраивалась, а оказалось, что лекции и ссылок недостаточно для решения, а об этом нигде и не сказано.
На самом деле не нужно ссылаться на сторонние материалы. Внимательно пересмотрите часть предыдущей лекции, а именно про arguments и все станет на свои места)))
Нашел решение задания, но не знаю, как его встроить в него - решил его в своем редакторе, там работает. Выводит производное умноженное на среднее арифметическое. Но в задании очень странная конструкция.
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));
И еще вопрос:
В задании задается 7, как первый множитель и среднее арифметическое от чисел (1, 3, 5), как второй множитель.
Среднее арифметическое: 1 + 3 + 5 = 9, 9 / 3 = 3 Произведение: 7 * 3 = 21
Насколько я понимаю проверяется равно ли полученное из функции число 30:
assert.equal(averageTenMultiplier(1, 3, 5), 30);
Вы нашли где-то в интернете или сами написали? К тому же, оно не правильное.
Сам написал. Использовал пример из лекции про аргументы
а почему arguments[1]?
Опечатка - там i
Код написано по образу вот этого примера:
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 перестало работать, странно.
Поправил функцию свою. Теперь работает, как часы:
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
Но встроить в задание по-прежнему никак не удается
лишняя фигурная скобка конце кода выше у тебя
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; }
Да, убрал. Спасибо большое. Но код по-прежнему не работает в терминале и работает в редакторе.
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







