<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 柯里化、原生bind、防抖節(jié)流函數(shù)、實(shí)現(xiàn)promise

          2019-7-25    seo達(dá)人

          如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

          多參數(shù)柯里
          原生bind
          實(shí)現(xiàn)promise
          防抖節(jié)流函數(shù)
          多參數(shù)柯里化

          參數(shù)fn可以是function(a,b,c){},也可以是function(a,b,c,d,f){}

          // 支持多參數(shù)傳遞
          function progressCurrying(fn, args) {

              var _this = this
              var len = fn.length;
              var args = args || [];
              return function() {
                  var _args = Array.prototype.slice.call(arguments).concat(args);
                  // 如果參數(shù)個(gè)數(shù)小于最初的fn.length,則遞歸調(diào)用,繼續(xù)收集參數(shù)
                  if (_args.length < len) {
                      return progressCurrying.call(_this, fn, _args);
                  }

                  // 參數(shù)收集完畢,則執(zhí)行fn
                  return fn.apply(this, _args);
              }
          }

          原生js實(shí)現(xiàn)bind

          Function.prototype.myBind = function(Othis){
            if(typeof this !== "function"){
              return new TypeError("not a function");
            }
            let _this = this;
            let args = [...arguments].slice(1);
            let func = function(){};
            let fBound = function () {
              return _this.apply(this instanceof func ?this:Othis,[...arguments].concat(args));
            }
            func.prototype = _this.prototype;
            fBound.prototype = new func();
            return fBound;
          }

          防抖函數(shù)

          //每wait時(shí)間內(nèi)執(zhí)行一次,若期間被觸發(fā),則重新執(zhí)行
          function debounce(func,wait) {
            var timeout ;
            return function(){
              let args = [...arguments];
              let _this = this;
              if(timeout){
                clearTimeout(timeout);
              }
              timeout = setTimeout(function() {
                func.apply(_this,args);
              }, wait);
            }
          }

          節(jié)流函數(shù)

          //每wait時(shí)間執(zhí)行一次
          function throttle(func,wait){
            var timeStart = 0 ;
            return function(){
              let _this = this;
              let args = [...arguments];
              let now = Date().now();
              if(now - timeStart >wait){
                func.apply(_this,args);
                timeStart = now;
              }
            }
          }

          實(shí)現(xiàn)一個(gè)promise

              function _Promise(func){
                  this.status = 'pending'
                  this.result = '' ;
                  func(this.resolve.bind(this),this.reject.bind(this));
              }
              _Promise.prototype.resolve = function(result){
                  if(this.status == 'pending'){
                      this.status = 'fullfilled';
                      this.result = result;
                  }
              }
              _Promise.prototype.reject = function(error){
                  if(this.status == 'pending'){
                      this.status = 'rejected';
                      this.result = error;
                  }
              }
              _Promise.prototype.then = function(preResolve,preReject){
                  let _isPromise ;
                  if(this.status == 'fullfilled'){
                      _isPromise = preResolve(this.result);
                  }else if(this.status == 'rejected' && arguments[1]){
                       _isPromise = preReject(this.result);
                  }
                  return _isPromise instanceof _Promise ? _isPromise:this;
              }

          實(shí)現(xiàn)一個(gè)promise.all()

           function promiseAll(promiseArray){
                  //首先參數(shù)一定是一個(gè)數(shù)組
                  //然后此函數(shù)返回的是一個(gè)promise,如果全部成功,則返回結(jié)果的數(shù)組,只要有一個(gè)失敗,則返回失敗的結(jié)果
                  return new Promise(function (resolve,reject){
                      if(!Array.isArray(promiseArray)){
                          return reject(new TypeError("not a function"));
                      }
                      let resolveNum = 0;
                      let arrNum = promiseArray.length;
                      let resolveResult = [];
                      for(let i=0; i<arrNum ;i++){
                          (function (i){
                              Promise.resolve(promiseArray[i]).then(function(result){
                                  resolveNum ++;
                                  resolveResult.push(result);
                                  if(resolveNum == arrNum){
                                      return resolve(resolveResult);
                                  }
                              },function(error){
                                  return reject(error);
                              })
                          })(i);
                      }
                  }) //返回的promise結(jié)束
                  
              }
          藍(lán)藍(lán)設(shè)計(jì)m.sdgs6788.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

          日歷

          鏈接

          個(gè)人資料

          存檔

          激情综合色综合久久综合| 国产精品久久久久久福利69堂| 国产亚洲美女精品久久久 | 99热精品久久只有精品| 国内精品久久久久久久久电影网| 色综合久久中文色婷婷| 国产午夜福利精品久久| 久久噜噜电影你懂的| 久久99中文字幕久久| 久久精品无码免费不卡| 欧美大战日韩91综合一区婷婷久久青草| 久久国产精品免费一区二区三区| 久久国产精品99精品国产987| 国内精品伊人久久久久av一坑 | 久久成人精品| 久久成人国产精品一区二区| 久久伊人精品青青草原日本| 欧美精品九九99久久在观看| 热99RE久久精品这里都是精品免费| 久久人人爽人人爽人人爽| 77777亚洲午夜久久多喷| 国产精品免费福利久久| 99久久99这里只有免费费精品| 97久久精品国产精品青草| 激情五月综合综合久久69| 无码八A片人妻少妇久久| 精品蜜臀久久久久99网站| 国产精品狼人久久久久影院| 久久久精品波多野结衣| 久久精品无码一区二区WWW| 国产精品久久久久aaaa| 亚洲欧洲久久av| 久久香蕉综合色一综合色88| 久久久精品人妻无码专区不卡| 久久婷婷国产剧情内射白浆 | 国产午夜久久影院| 精品国产热久久久福利| 囯产极品美女高潮无套久久久| 久久精品麻豆日日躁夜夜躁| 午夜精品久久久久9999高清| 国产成人精品久久一区二区三区av |