国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript函數柯里化詳解

2019-11-20 10:11:23
字體:
來源:轉載
供稿:網友

什么是柯里化

柯里化是這樣的一個轉換過程,把接受多個參數的函數變換成接受一個單一參數(譯注:最初函數的第一個參數)的函數,如果其他的參數是必要的,返回接受余下的參數且返回結果的新函數。

柯理化函數思想:一個js預先處理的思想;利用函數執行可以形成一個不銷毀的作用域的原理,把需要預先處理的內容都儲存在這個不銷毀的作用域中,并且返回一個小函數,以后我們執行的都是小函數,在小函數中把之前預先存儲的值進行相關的操作處理即可;

柯里化函數主要起到預處理的作用;

bind方法的作用:把傳遞進來的callback回調方法中的this預先處理為上下文context;

bind方法實現原理1代碼如下所示:

/*** bind方法實現原理1* @param callback [Function] 回調函數* @param context [Object] 上下文* @returns {Function} 改變this指向的函數*/function bind(callback,context) {var outerArg = Array.prototype.slice.call(arguments,2);// 表示取當前作用域中傳的參數中除了fn,context以外后面的參數;return function (){var innerArg = Array.prototype.slice.call(arguments,0);//表示取當前作用域中所有的arguments參數;callback.apply(context,outerArg.concat(innerArg));}} 

下面一段代碼模仿在原型鏈上的bind實現原理

/*** 模仿在原型鏈上的bind實現原理(柯理化函數思想)* @param context [Object] 上下文* @returns {Function} 改變this指向的函數*/Function.prototype.mybind = function mybind (context) {var _this = this;var outArg = Array.prototype.slice.call(arguments,1);// 兼容情況下if('bind' in Function.prototype) {return this.bind.apply(this,[context].concat(outArg));}// 不兼容情況下return function () {var inArg = Array.prototype.slice.call(arguments,0);inArg.length === 0?inArg[inArg.length]=window.event:null;var arg = outArg.concat(inArg);_this.apply(context,arg);}}

函數柯里化(Currying)

在計算機科學中,柯里化是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術

柯里化就是預先將某些參數傳入,得到一個簡單的函數。但是預先傳入的參數被保存在閉包中,因此會有一些奇特的特性。比如:

例:

var adder = function(num) {return function(y) {return num + y;}}var inc = adder(1);var dec = adder(-1);//inc, dec現在是兩個新的函數,作用是將傳入的參數值(+/-)1alert(inc(99));//100alert(dec(101));//100alert(adder(100)(2));//102alert(adder(2)(100));//102

以上內容是小編給大家介紹的JavaScript函數柯里化及實現bind方法的方法,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巨野县| 涟源市| 保康县| 日照市| 安康市| 衡阳县| 广州市| 孝昌县| 梁山县| 启东市| 凤庆县| 镇原县| 平乡县| 奉新县| 定日县| 铜梁县| 五莲县| 临猗县| 乐亭县| 通江县| 宜城市| 乐山市| 漳州市| 镇安县| 苗栗市| 铁力市| 罗源县| 聊城市| 南召县| 增城市| 威海市| 固安县| 武清区| 光泽县| 东山县| 万宁市| 内丘县| 高清| 钦州市| 同德县| 格尔木市|