网上看到的一道题,分享一下
題目為補全function add, 使add(2)(3)(4) 結果為9. 原文地址?http://www.cnblogs.com/rubylouvre/archive/2012/02/15/2351991.html?
看到題目第一時間會進行加法運算 2+3+4 = 9, 所以絕大多數都會想辦法實現加法運算,同時 我們可以看到進行了三次方法調用,所以必須保證每次調用的返回值是function類型,
而且,為了保存加法運算的結果,還要利用閉包特性,定義個自由變量來保存,于是下面的代碼產生了
function add(x){var res = 0;return (function(t){res += t;})(x) }run的結果: undefined is not a function
Oh 此時我們只是把運算結果的值保存起來了,沒有return
于是乎修改:
function add(x){var res = 0;return (function innerAdd(t){res += t;return res;})(x) }run的結果,number is not a function
很明顯,2(3)(4),會拋錯。因為每次return的值不是function,于是,可以想到每次可以返回該innerAdd,同時重寫該function的toString()方法,
于是:
function add(x){var res=0;return (function innerAdd(x){res = x+res;arguments.callee.toString = function(){return res;};return arguments.callee;})(x); }其他方式:
特定的方式,利用function的 [[scope]]屬性,這種方式局限性太大,代碼需要根據調用次數的多少來變化
function add(x){return function(y){return function(z){return x+y+z;}} }?
?引用文章作者的方法:
function add(x){if(add.i){add.i += x;}else{add.i=x;}add.toString = function(){return add.i;}return add; }?地址 :?http://jsbin.com/mamajefu/1/edit
轉載于:https://www.cnblogs.com/teamobaby/p/3904896.html
總結
以上是生活随笔為你收集整理的网上看到的一道题,分享一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Processing 字体变形
- 下一篇: webrtc 源码结构