第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

急求?。。?!實現(xiàn)函數(shù)柯里化,最后返回柯里化函數(shù)的時候為什么不需要額外傳參?跪求!

急求?。。?!實現(xiàn)函數(shù)柯里化,最后返回柯里化函數(shù)的時候為什么不需要額外傳參?跪求!

慕慕森 2019-12-17 17:12:43
在學習函數(shù)柯里化的時候看到這篇文章https://github.com/yygmind/bl...,作者的一個實現(xiàn)思路是這樣的:functioncurrying(fn,length){length=length||fn.length;//注釋1returnfunction(...args){//注釋2returnargs.length>=length//注釋3?fn.apply(this,args)//注釋4:currying(fn.bind(this,...args),length-args.length)//注釋5}}//Testconstfn=currying(function(a,b,c){console.log([a,b,c]);});fn("a","b","c")//["a","b","c"]fn("a","b")("c")//["a","b","c"]fn("a")("b")("c")//["a","b","c"]fn("a")("b","c")//["a","b","c"]底下有一個評論說,"可以不用在遞歸currying的時候傳入length-args.length,因為bind返回的函數(shù)的length已經是length-args.length了",他給出的代碼是:functioncurrying(fn){returnfunction(...args){returnargs.length>=fn.length?fn.apply(this,args):currying(fn.bind(this,...args))}}為什么bind后返回的函數(shù)的形參個數(shù),即length剛好是length-args.length呢?這個length-args.length我的理解是計算還需要多少個參數(shù)才可以實際運算fn,第一次遞歸后,currying的第二個參數(shù)就是這個差值,不再是函數(shù)形參個數(shù),之后拿這個差值與柯里化后的函數(shù)實際接受的參數(shù)數(shù)目比較,如果這個數(shù)目達到了差值,就不需要再遞歸了。而按照這個評論的說法,bind返回的函數(shù)的length就是length-args.length,因此不需要給遞歸的currying傳length-args.length,這是怎么看出來的?bind的第二個參數(shù)會在bind返回的函數(shù)實際執(zhí)行的時候傳遞給它,基于這一點我們才可以收集參數(shù),最后統(tǒng)一運算,但是為什么bind返回的函數(shù)的length就剛好是length-args.length呢?
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

function.prototype.bind

bind方法設置了返回的函數(shù)對象的length為(輸入的)fn.length-args.length


查看完整回答
反對 回復 2019-12-18
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

bind的時候args展開的是實參,數(shù)量當然就是傳入的實參數(shù)量。

這種寫法只適用于es6,es5以前還是需要第一種寫法。(雖然第一種寫法也用到了參數(shù)展開,但是可以很容易改寫成非展開的寫法,而第二種則依賴于展開操作的副作用)


查看完整回答
反對 回復 2019-12-18
  • 2 回答
  • 0 關注
  • 315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號