Друг попросил меня создать функцию, которая выполняет следующие функции: f1()()()()(0)
должен давать результат как 4. f1()(0)
должен выдавать результат как 1. Это число предшествующих круглых скобок до 0 равно прошло. Я тщательно изучил, как это сделать. Есть несколько концепций для объединения строк: например, IIFE, Анонимные функции и Лексическая область. Использует ли это более продвинутую концептуальную функцию javascript, которая должна быть известна? Here is the image of what needs to be donejavascript: закрытие, анонимные функции, iife
0
A
ответ
0
Отсутствие передовых концепций. Вам нужно только знать, как вернуть функцию из другой функции.
Я бы предпочел, чтобы вызвать функцию f0
, потому что f0(0)
очевидно должна возвращать 0
. Тогда мы можем представить себе все такие функции, которые возвращают уровень их скопления — например, f42(0)
возвращает 42
.
При вызове без параметров, f0()
должен возвращать f1
, так что f0()(0)
является 1
, и так далее. Это непростая задача:
function f0(x) {
return (x === 0) ? 0 : f1(x);
}
Очевидно, что мы не хотим записывать бесконечность таких функций. Давайте создадим функцию завод, который будет строить их автоматически по мере необходимости:
function factory(level) {
function f_level(x) {
return (x === 0) ? level : factory(level + 1);
}
return f_level;
}
Завод всегда возвращает функцию, а именно factory(0)
функция f0
вы хотели.