Front-end-Job-Interview-Questions

Ответы на вопросы на должность Frontend разработчика.


Project maintained by FedorovAlexander Hosted on GitHub Pages — Theme by mattgraham

Можете ли вы привести пример каррированной функции (curry function) и в чём их преимущество?

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

function curry(fn) {
	if (fn.length === 0) {
		return fn;
	}
	function _curried(depth, args) {
		return function (newArgument) {
			if (depth - 1 === 0) {
				return fn(...args, newArgument);
			}
			return _curried(depth - 1, [...args, newArgument]);
		};
	}
	return _curried(fn.length, []);
}

function add(a, b) {
	return a + b;
}

var curriedAdd = curry(add);
var addFive = curriedAdd(5);

var result = [0, 1, 2, 3, 4, 5].map(addFive); // [5, 6, 7, 8, 9, 10]

Предыдущий вопрос | Следующий вопрос