js函式add(1)(2)(3)(4)...實現無限極累加原理解析

Jarva發表於2019-02-25

用js 實現一個無限極累加的函式, 形如:
add(1) //=> 1;
add(1)(2) //=> 2;
add(1)(2)(3) //=> 6;
add(1)(2)(3)(4) //=> 10;
以此類推...

  1. 我們要了解一個知識點: 當我們直接對函式使用 alert()console.log() 時,函式的 toString() 方法會被呼叫。
    function s(a) {
		return a+1
	}
	console.log(s)
    // undefined
複製程式碼
  1. 我們現在對函式s重寫TOString。
    function s(a) {
		return a+1
	}
    s.toString = function() {
        return 1
    }
	console.log(s)
    // f 1
    typeof(s)
    // "function"
複製程式碼
  1. 我們現在將函式s包裹起來,返回一個函式,此時形成了一個閉包。
    function add(a) {
        function s(a) {
		    return a+1
        }
        s.toString = function() {
            return a
        }
        return s
    }
    console.log(add(2)) // f 2
複製程式碼
  1. 稍作修改
    function add(a) {
        function s(b) {
            a = a + b
		    return s
        }
        s.toString = function() {
            return a
        }
        return s
    }
    console.log(add(1)(2)(3)(4)) // f 10
複製程式碼

收工~

相關文章