Насправді це не так вже й складно, якщо ви працюєте через нього поетапно. Давайте працювати зсередини назовні. Дзвінки:
three()
без параметра означає, що ви передаєте невизначене значення як функцію. Отже, це те саме, що говорити:
makeNum(3, undefined)
Коли makeNum бачить, що функція не визначена, вона повертає число, яке дорівнює 3.
Тож ми зменшили це до:
eight(minus(3))
Тепер подивимося, як
minus(3)
оцінює. мінус бачить, що вказаний вами параметр дорівнює 3, тому він повертає функцію, яка може прийняти параметр "ліворуч" і відняти 3, які ми вже надали з нього. Він НЕ виконує. Він просто сидить там і чекає, коли його зателефонують із параметром "ліворуч", щоб він міг відняти з нього 3
Тож ми зменшили це до:
eight(function(left){
return left - 3;
})
Тепер давайте подивимось, як це оцінює. вісім викликається, при цьому функція функціонує:
function(left){
return left - 3;
}
Потім він проходить 8, і ця функція makeNum коли говорить:
makeNum(8, func)
Потім makeNum бачить, що функцію надано (і тому не визначено) і повертає функцію (число) назад до восьми функцій, що це те саме, що передача:
8 - 3
повернутися до восьми функцій. Вісім функцій отримує це значення, а потім повертає його. Тож ми зменшили це до:
5
який входить у консоль.