JavaScript函式多個小括號連續呼叫

antzone發表於2017-05-15

在實際應用中可能有類似如下方式的函式呼叫方式:

[JavaScript] 純文字檢視 複製程式碼
func(1)(2)(3)

這就是函式柯里化的表現形式(當然並不定有此形式的就是柯里化的函式),下面進行一下簡單介紹:

柯里化又稱部分求值,一個柯里化的函式首先會接受一些傳參,接受了這些傳參之後,函式並不會立即求值,而是繼續返回另外一個函式,剛才傳入的引數在函式內形成的閉包中被儲存起來,到引數被真正求值的時候,之前傳入的引數會被一次性用於求值。

首先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func(str) {
  var f = function(s){
    return str+", "+s;
  }
  return f;
}
var str = func("antzone")("softwhy");
console.log(str);

上面的柯里化非常的不智慧,如果我們需要連線三個字串就無法正確實現了。

程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func(str) {
  var ret = Array.prototype.slice.call(arguments).join(', ');
  var temp = function (str) {
    ret = [ret, Array.prototype.slice.call(arguments).join(', ')].join(', ');
    return temp;
  };
  temp.toString = function () {
    return ret;
  };
  return temp;
}
var tempFunc = func("antzone")("softwhy")("com");
console.log(tempFunc.toString());

上面的程式碼完美實現了字串無限連線的功能。

關於JavaScript函式柯里化的更多內容可以參閱JavaScript 函式柯里化詳解一章節。

相關文章