js函式add(1)(2)(3)連續呼叫效果

admin發表於2017-12-04

本程式碼是在網上看到的,感覺挺有意思的,所以這裡就分享一下,並且做一下詳細介紹。

感覺這內碼表具有一定的實用價值,就算是沒有,其中的一些相關知識也是挺好的,感興趣的朋友可以參考一下。

如果要實現標題形式的呼叫方式可以實用類似如下程式碼:

[JavaScript] 純文字檢視 複製程式碼
var add = function(a){
  return function(b){
    return function(c){
      return a+b+c;
    };
  };
};
console.log(add(1)(2)(3));

上面的程式碼確實實現了標題所示的呼叫方式,但是上面的一個最大問題就是太過於死板,呼叫的次數已經固定,如果是add(1)或者add(1)(2)(3)(4)都會有問題,不能夠正確計算結果,所以我們需要一個更為靈活的方案,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
function add(x){
  var sum=x;
  var tmp=function(y){
    sum=sum+y;
    return tmp;
  };
  tmp.toString=function(){
    return sum;
  };
  return tmp;
}
console.log(add(1)(2)(3));
console.log(add(1)(2)(3)(4));

上面的程式碼實現了靈活的呼叫效果,下面介紹一下它的實現過程。

程式碼註釋:

(1).function add(x){},此函式實現了多次呼叫效果,引數就是要傳遞的數字。

(2).var sum=x,將x值賦值給sum。

(3).var tmp=function(y){

  sum=sum+y;

  return tmp;

},宣告一個函式,此函式實現了數字的累加效果,並且會返回函式本身。

(4).tmp.toString=function(){

  return sum;

},重寫了tmp的toString()方法,目的是為了返回計算結果值,add(1)(2)(3)單純這樣獲取的是函式物件,而是用console.log()輸出add(1)(2)(3)的時候就會隱式呼叫toString()方法,於是就會獲取計算值。

(5).return tmp,返回函式。

相關文章