[筆記] Currying 柯里化和一道經典面試題

在近期的面試中,獲得了一個經典 JavaScript 實作題,解法的思路相當有趣,所以將其筆記下來。
javascript es6 logo


題目

實作 helloSat 這個函式:
helloSat(1, 2); // 3
helloSat(1)(2); // 3

解法

其實這一題網路上常見的版本會是:
add(1,2); // 3
add(1)(2); // 3

currying

原理

Currying 柯里化

簡言之,利用 JavaScript 的 Closure 閉包特性,將一個接受 n 個參數的函式,變成 n 個只接受一個參數的函式。所以,當一個函式呼叫後,只處理一個參數,再回傳一個函式。

function 的自動調用

function 在執行到最後的 return 值,會使用 function.toString 的結果,所以可以藉由此一特性,在瀏覽器中的 Console 實現題目要求。


參考資料

1. Currying in JavaScript(柯里化)
2. 柯里化
3. 一道面试题引发的对javascript类型转换的思考
4. 第 84 题:请实现一个 add 函数,满足以下功能。

按讚加入粉絲團

延伸閱讀