JavaScript函數柯里化詳解
來源:易賢網 閱讀:738 次 日期:2016-07-06 13:38:29
溫馨提示:易賢網小編為您整理了“JavaScript函數柯里化詳解”,方便廣大網友查閱!

柯里化函數主要起到預處理的作用。接下來通過本文給大家介紹JavaScript函數柯里化有什么作用及實現bind方法,非常具有參考價值特此分享供大家學習

什么是柯里化

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

柯理化函數思想:一個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現在是兩個新的函數,作用是將傳入的參數值(+/-)1

alert(inc(99));//100

alert(dec(101));//100

alert(adder(100)(2));//102

alert(adder(2)(100));//102

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

更多信息請查看網絡編程
易賢網手機網站地址:JavaScript函數柯里化詳解
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
未满十八18勿进黄网站免费看