欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript函數(shù)柯里化詳解

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

什么是柯里化

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

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

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

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

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

/**
* bind方法實(shí)現(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實(shí)現(xiàn)原理

/**
* 模仿在原型鏈上的bind實(shí)現(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ì)算機(jī)科學(xué)中,柯里化是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)

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

例:

var adder = function(num) {
return function(y) {
return num + y;
}
}
var inc = adder(1);
var dec = adder(-1);
//inc, dec現(xiàn)在是兩個(gè)新的函數(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ù)柯里化及實(shí)現(xiàn)bind方法的方法,希望對大家有所幫助!

相關(guān)文章

  • js實(shí)現(xiàn)日期級聯(lián)效果

    js實(shí)現(xiàn)日期級聯(lián)效果

    本篇文章主要是對js實(shí)現(xiàn)日期級聯(lián)效果的實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)

    javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)

    看到一些大型網(wǎng)站,頁面如果有很多圖片的時(shí)候,當(dāng)你滾動(dòng)到相應(yīng)的行時(shí),當(dāng)前行的圖片才即時(shí)加載的,這樣子的話頁面在打開只加可視區(qū)域的圖片,而其它隱藏的圖片則不加載,一定程序上加快了頁面加載的速度,跟著小編一起學(xué)習(xí)javascript實(shí)現(xiàn)圖片延遲加載吧
    2015-08-08
  • 兼容IE FF Opera的javascript最短的拖動(dòng)代碼

    兼容IE FF Opera的javascript最短的拖動(dòng)代碼

    關(guān)于拖動(dòng)的代碼太多了要么復(fù)雜要么不兼容,在這就不多說了. 這里提供個(gè)簡潔的。
    2008-01-01
  • JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式詳解

    JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式詳解

    js中事件監(jiān)聽就是利用addEventListener來綁定一個(gè)事件,這個(gè)用法在jquery中非常常用并且簡單,但在原生js中比較復(fù)雜,下面這篇文章主要給大家介紹了關(guān)于JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • js 正則驗(yàn)證密碼強(qiáng)度(包含數(shù)字+特殊字符+英文字母大小寫)

    js 正則驗(yàn)證密碼強(qiáng)度(包含數(shù)字+特殊字符+英文字母大小寫)

    密碼驗(yàn)證是常見的網(wǎng)站注冊方法,本文主要介紹了js 正則驗(yàn)證密碼強(qiáng)度(包含數(shù)字+特殊字符+英文字母大小寫),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 基于js粘貼事件paste簡單解析以及遇到的坑

    基于js粘貼事件paste簡單解析以及遇到的坑

    下面小編就為大家?guī)硪黄趈s粘貼事件paste簡單解析以及遇到的坑。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • JavaScript圖片上傳并預(yù)覽的完整實(shí)例

    JavaScript圖片上傳并預(yù)覽的完整實(shí)例

    上傳是個(gè)老生常談的話題了,多數(shù)情況下各位想必用的是uplodify,webUploader之類的插件,這篇文章主要給大家介紹了關(guān)于JavaScript圖片上傳并預(yù)覽的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 提高網(wǎng)站性能之 如何對待JavaScript

    提高網(wǎng)站性能之 如何對待JavaScript

    在一個(gè)頁面中,每一個(gè)外部JavaScript 及CSS文件都會(huì)導(dǎo)致一個(gè)額外的HTTP請求。所以,如何合理的合并JavaScript 文件及CSS文件也是前端工程師應(yīng)該考慮的。
    2009-10-10
  • 微信小程序?qū)隫ant報(bào)錯(cuò)VM292:1 thirdScriptError的解決方法

    微信小程序?qū)隫ant報(bào)錯(cuò)VM292:1 thirdScriptError的解決方法

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)隫ant報(bào)錯(cuò)VM292:1 thirdScriptError的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 找到了一篇jQuery與Prototype并存的沖突的解決方法

    找到了一篇jQuery與Prototype并存的沖突的解決方法

    找到了一篇jQuery與Prototype并存的沖突的解決方法...
    2007-08-08

最新評論