Шаг 1й, на этапе инициализации скрипта: создали функцию compose
шаг 2й, в рантайме: создали функции square и sum
шаг 3й, вызов compose в качестве аргумента f передается функция square в качестве g - sum
шаг 4й, compose возвращает новую функцию созданую в рантайме, она помнит свое замыкание (f и g), эта функция сохраняется в squareofsum
шаг 5й, вызов squareofsum с аргументами 2, 3
шаг 6й, squareofsum вызывает функцию g (sum) с тем же контекстом и аргументами, что получила сама, то есть с аргументами 2, 3, то есть вызывается sum(2, 3)
шаг 7й, sum вычисляет 2 + 3 и возвращает результат 5
шаг 8й, squareofsum вызывает функцию square со своим контекстом и 1 аргументом, результатом шага 7, то есть вызывает square(5)
шаг 9й, square вычисляет 5 * 5 и возвращает результат 25
шаг 10й, squareofsum возвращает результат который вернула square - 25
шаг 11й, alert(25)