羣裏有人說實現相似add(1)(2)(3)調用方式的方法,結果立刻有人回答:css
沒錯!那要是add(1)(2)(3)(4) 這樣4個調用呢,那這個確定不適用了。
閉包
首先要一個數記住每次的計算值,因此使用了閉包,在tmp中記住了x的值,第一次調用add(),初始化了tmp,並將x保存在tmp的做用鏈中,而後返回tmp保證了第二次調用的是tmp函數,後面的計算都是在調用tmp, 由於tmp也是返回的本身,保證了第二次以後的調用也是調用tmp,而在tmp中將傳入的參數與保存在做用鏈中x相加並付給sum,這樣就保證了計算;函數
可是在計算完成後仍是返回了tmp這個函數,這樣就獲取不到計算的結果了,咱們須要的結果是一個計算的數字那麼怎麼辦呢,首先要知道JavaScript中,打印和相加計算,會分別調用toString或valueOf函數,因此咱們重寫tmp的toString和valueOf方法,返回sum的值;spa
摘自:http://www.css88.com/archives/5147#more-5147ip