Eğer adım adım ilerliyorsanız aslında o kadar da karmaşık değil. İçten dışa çalışalım. Arayan:
three()
parametre olmadan, tanımlanmamış bir değeri işlev olarak geçirdiğiniz anlamına gelir. Yani demekle aynı:
makeNum(3, undefined)
MakeNum işlevin tanımsız olduğunu gördüğünde, 3 olan num değerini döndürür.
Bu yüzden bunu aşağıya indirdik:
eight(minus(3))
Şimdi nasıl olduğunu görelim
minus(3)
değerlendirir. eksi, sağladığınız parametrenin 3 olduğunu görür, bu nedenle "sol" bir parametreyi kabul edebilecek ve zaten sağladığımız 3'ü çıkarabilecek bir işlev döndürür. Yürütmez. Sadece orada oturur, "sol" parametre ile çağrılmayı bekler, böylece 3'ü çıkarabilir.
Bu yüzden bunu aşağıya indirdik:
eight(function(left){
return left - 3;
})
Şimdi bunun nasıl değerlendirildiğini görelim. sekiz işlevi func parametresi şu işlevle çağrılır:
function(left){
return left - 3;
}
Daha sonra 8'i geçer ve bu işlevi şöyle yazdığında makeNum yapar:
makeNum(8, func)
makeNum daha sonra işlevin sağlandığını (ve bu nedenle tanımsız olmadığını) görür ve işlev (num) değerini, iletme ile aynı olan sekiz işleve geri döndürür:
8 - 3
geri sekiz fonksiyona. Sekiz işlev bu değeri alır ve sonra geri döndürür. Bu yüzden bunu aşağıya indirdik:
5
bu konsolda oturum açar.