SeokkyN
@SeokkyN

Зачем тут нужен apply()?

Добрый день. Решаю задачку в учебнике:
"Напишите функцию applyAll(func, arg1, arg2...), которая получает функцию func и произвольное количество аргументов. Она должна вызвать func(arg1, arg2...), то есть передать в func все аргументы, начиная со второго, и возвратить результат."

Написал такое решение:
function applyAll() {
	var args = [].slice.call(arguments);
	var func = args.shift();
	return func(args);
};
console.log(applyAll(Math.max, 6,3,4,5));

Оно благополучно не сработало. Правильное выглядит так:
function applyAll() {
	var args = [].slice.call(arguments);
	var func = args.shift();
	return func.apply(this, args);
};
console.log(applyAll(Math.max, 6,3,4,5));

Объясните мне, пожалуйста, зачем в строке "return func.apply(this, args)" нужен apply() ? Ведь у меня есть тело функции, есть аргументы. Почему я не могу сделать просто func(args) ? Зачем нужно подставлять контекст? Заранее благодарен.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Почему я не могу сделать просто func(args) ?

Потому что args - это массив аргументов, а вы должны передавать их по отдельности.

Зачем нужно подставлять контекст?

Не нужно. Можете делать так: func(...args).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы