Sebenarnya tidak terlalu rumit jika Anda mengerjakannya langkah demi langkah. Mari kita bekerja dari dalam ke luar. Panggilan:
three()
tanpa parameter berarti Anda memberikan nilai yang tidak ditentukan sebagai func. Jadi sama dengan mengatakan:
makeNum(3, undefined)
Ketika makeNum melihat bahwa func tidak terdefinisi, ia mengembalikan num, yaitu 3.
Jadi kami mengurangi ini menjadi:
eight(minus(3))
Sekarang mari kita lihat caranya
minus(3)
mengevaluasi. minus melihat bahwa parameter yang Anda berikan adalah 3, sehingga mengembalikan fungsi yang dapat menerima parameter "kiri" dan kurangi 3 yang sudah kami sediakan darinya. Itu TIDAK mengeksekusi. Itu hanya duduk di sana, menunggu dipanggil dengan parameter "kiri" sehingga dapat mengurangi 3 darinya.
Jadi kami mengurangi ini menjadi:
eight(function(left){
return left - 3;
})
Sekarang mari kita lihat bagaimana ini mengevaluasi. delapan disebut dengan parameter func sebagai fungsi ini:
function(left){
return left - 3;
}
Kemudian melewati 8 dan fungsi ini untuk membuatNum ketika ia mengatakan:
makeNum(8, func)
makeNum kemudian melihat bahwa func telah disediakan (dan karenanya tidak terdefinisi) dan mengembalikan func (num) kembali ke delapan fungsi, yang sama dengan meneruskan:
8 - 3
kembali ke fungsi delapan. Delapan fungsi menerima nilai itu dan kemudian mengembalikannya. Jadi kami mengurangi ini menjadi:
5
yang masuk di konsol.