Задать вопрос
@v_kabish
Front-End/верстальщик

Вопрос по примеру из книжки Фленигана, call и apply?

Всем привет.

Изучаю javascript, читаю знаменитое "Подробнее руководство" и в разделе "Функции высшего порядка" наткнулся на пример который не совсем понимаю..
Не могу понять шаги выполнения кода и полученный результат.
Напишите пожалуйста шаги преобразования вызова в результат

Всем откликнувшимся, большое спасибо.
Пример выписал в фидле.

https://jsfiddle.net/gqw6ofsr/1/
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@ivoronov
Веб-разработчик
return f.call(this, g.apply(this, arguments)); - трудность, видимо, конкретно в этой ф-ции. В общем-то, информации масса. К примеру: здесь.
Если в кратце: call делает вызов ф-ции в необходимом для вас контексте (потому первым аргументом передается this) и принимает аргументы в виде списка, apply делает тоже самое, но принимает аргументы в виде массива. Потому во втором случае именно apply, а не call, т.к. принимается массив arguments.
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Шаг 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)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AtriSimone
@AtriSimone
Осваиваю Front-end
В любом современном браузере есть панель разработчика, там можно открыть свой js код, поставить точки останова и посмотреть шаг за шагом на выполнение скрипта, что куда записывается и как выполняется.
Это опыт, который поможет вам лучше разбираться в коде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы