日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网上看到的一道题,分享一下

發(fā)布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网上看到的一道题,分享一下 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//function add(x) {________}; alert(add(2)(3)(4));

  題目為補(bǔ)全function add, 使add(2)(3)(4) 結(jié)果為9. 原文地址?http://www.cnblogs.com/rubylouvre/archive/2012/02/15/2351991.html?

看到題目第一時間會進(jìn)行加法運(yùn)算 2+3+4 = 9, 所以絕大多數(shù)都會想辦法實現(xiàn)加法運(yùn)算,同時 我們可以看到進(jìn)行了三次方法調(diào)用,所以必須保證每次調(diào)用的返回值是function類型,

而且,為了保存加法運(yùn)算的結(jié)果,還要利用閉包特性,定義個自由變量來保存,于是下面的代碼產(chǎn)生了

function add(x){var res = 0;return (function(t){res += t;})(x) }

  run的結(jié)果: undefined is not a function

Oh 此時我們只是把運(yùn)算結(jié)果的值保存起來了,沒有return

于是乎修改:

function add(x){var res = 0;return (function innerAdd(t){res += t;return res;})(x) }

  run的結(jié)果,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]]屬性,這種方式局限性太大,代碼需要根據(jù)調(diào)用次數(shù)的多少來變化

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

轉(zhuǎn)載于:https://www.cnblogs.com/teamobaby/p/3904896.html

總結(jié)

以上是生活随笔為你收集整理的网上看到的一道题,分享一下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。