Nó thực sự không phức tạp nếu bạn làm từng bước một. Hãy làm việc từ trong ra ngoài. Gọi điện thoại:
three()
không có tham số nghĩa là bạn chuyển một giá trị không xác định là func. Vì vậy, nó giống như nói:
makeNum(3, undefined)
Khi makeNum thấy rằng func không được xác định, nó trả về num, là 3.
Vì vậy, chúng tôi đã giảm điều này xuống:
eight(minus(3))
Bây giờ hãy xem làm thế nào
minus(3)
đánh giá. trừ đi thấy rằng tham số bạn cung cấp là 3, do đó, nó trả về một hàm có thể chấp nhận tham số "bên trái" và trừ đi 3 tham số mà chúng tôi đã cung cấp từ nó. Nó KHÔNG thực thi. Nó chỉ ngồi đó, chờ đợi để được gọi với tham số "trái" để có thể trừ 3 từ nó.
Vì vậy, chúng tôi đã giảm điều này xuống:
eight(function(left){
return left - 3;
})
Bây giờ hãy xem cách đánh giá này. tám được gọi với tham số func là hàm này:
function(left){
return left - 3;
}
Sau đó, nó vượt qua 8 và hàm này để makeNum khi nó nói:
makeNum(8, func)
makeNum sau đó thấy rằng func đã được cung cấp (và do đó không được xác định) và trả func (num) trở lại hàm tám, giống như việc truyền:
8 - 3
trở lại chức năng tám. Hàm tám nhận giá trị đó và sau đó trả về nó. Vì vậy, chúng tôi đã giảm điều này xuống:
5
được đăng nhập trong giao diện điều khiển.