суть while в сочетании со switch в том, что выполняется 1-й case, идет continue цикла while, выполняется второй case (т.к. у controller'а инкремент), вновь continue цикла while, наконец 3-й case, цикл while прерывается.
По поводу решений, к сожалению вы действительно не поняли вопрос.
Алгоритм является частью обфускатора JS кода, который берет на вход любой JS код и трансформирует его множеством способов. Конечная цель - максимально усложнить понимание кода.
Приведенные выше 2 куса кода - исходный код до и после работы алгоритма.
Соответственно ф-ии с прописанными им св-вами могут быть в исходном JS коде, который будет подан на вход обфускатору. Я тестирую алгоритм на бандле Angular 2 + зависимости и там несколько подобных мест.
Вопрос про то, почему статичное св-во ф-ии, заданное в одном case'е будет undefined в другом, при том, что сама ф-ия видна и в обоих case'ах.
Дмитрий Беляев: видимо вам сложно представить, что под ноду я могу писать пакет под NPM, который должен крутиться под максимальным кол-вом версий Node.js (начиная с 0.12).
Обфускатору для работы нужны esprima, escodegen и estraverse зависимости (у всех трех BSD лицензия). Эти 3 зависимости не включаются напрямую в конечный js-код, они require'тся.
Кроме того, в devDependences находятся всякие webpack'и (MIT), typescript'ы и т.д.
Если сможете разобраться в коде - отпишите сколько времени заняло, для статистики.