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

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

什么是柯里化

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

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

柯里化函數(shù)主要起到預(yù)處理的作用;

bind方法的作用:把傳遞進(jìn)來的callback回調(diào)方法中的this預(yù)先處理為上下文context;

bind方法實現(xiàn)原理1代碼如下所示:

/**

* bind方法實現(xiàn)原理1

* @param callback [Function] 回調(diào)函數(shù)

* @param context [Object] 上下文

* @returns {Function} 改變this指向的函數(shù)

*/

function bind(callback,context) {

var outerArg = Array.prototype.slice.call(arguments,2);// 表示取當(dāng)前作用域中傳的參數(shù)中除了fn,context以外后面的參數(shù);

return function (){

var innerArg = Array.prototype.slice.call(arguments,0);//表示取當(dāng)前作用域中所有的arguments參數(shù);

callback.apply(context,outerArg.concat(innerArg));

}

}

下面一段代碼模仿在原型鏈上的bind實現(xiàn)原理

/**

* 模仿在原型鏈上的bind實現(xiàn)原理(柯理化函數(shù)思想)

* @param context [Object] 上下文

* @returns {Function} 改變this指向的函數(shù)

*/

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);

}

}

函數(shù)柯里化(Currying)

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

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

例:

var adder = function(num) {

return function(y) {

return num + y;

}

}

var inc = adder(1);

var dec = adder(-1);

//inc, dec現(xiàn)在是兩個新的函數(shù),作用是將傳入的參數(shù)值(+/-)1

alert(inc(99));//100

alert(dec(101));//100

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

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

以上內(nèi)容是小編給大家介紹的JavaScript函數(shù)柯里化及實現(xiàn)bind方法的方法,希望對大家有所幫助!

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript函數(shù)柯里化詳解
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

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

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