2016-09-03 5 views
0

Друг попросил меня создать функцию, которая выполняет следующие функции: f1()()()()(0) должен давать результат как 4. f1()(0) должен выдавать результат как 1. Это число предшествующих круглых скобок до 0 равно прошло. Я тщательно изучил, как это сделать. Есть несколько концепций для объединения строк: например, IIFE, Анонимные функции и Лексическая область. Использует ли это более продвинутую концептуальную функцию javascript, которая должна быть известна? Here is the image of what needs to be donejavascript: закрытие, анонимные функции, iife

ответ

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 вы хотели.

Смежные вопросы