最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

什么是柯里化

柯里化是這樣的一個轉(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ù)先存儲的值進行相關(guān)的操作處理即可;

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

bind方法的作用:把傳遞進來的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);// 表示取當前作用域中傳的參數(shù)中除了fn,context以外后面的參數(shù);
return function (){
var innerArg = Array.prototype.slice.call(arguments,0);//表示取當前作用域中所有的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)

在計算機科學中,柯里化是把接受多個參數(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方法的方法,希望對大家有所幫助!

相關(guān)文章

  • 詳解js前端代碼異常監(jiān)控

    詳解js前端代碼異常監(jiān)控

    本文主要介紹了js代碼異常監(jiān)控的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 瀏覽器加載、渲染和解析過程黑箱簡析

    瀏覽器加載、渲染和解析過程黑箱簡析

    瀏覽器加載、渲染和解析過程的黑箱分析,對于渲染,利用 Fiddler 將網(wǎng)速調(diào)慢,可以看到 css 下載后會馬上渲染到頁面,渲染和下載同步進行,需要的朋友可以參考下
    2012-11-11
  • 詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實現(xiàn)

    詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實現(xiàn)

    這篇文章主要介紹了詳解微信開發(fā)中snsapi_base和snsapi_userinfo及靜默授權(quán)的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • javascript實現(xiàn)點擊按鈕切換輪播圖功能

    javascript實現(xiàn)點擊按鈕切換輪播圖功能

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)點擊按鈕切換輪播圖功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • javascript 閉包詳解

    javascript 閉包詳解

    閉包:是指有權(quán)訪問另外一個函數(shù)作用域中的變量的函數(shù)。創(chuàng)建閉包的常見方式就是在一個函數(shù)內(nèi)部創(chuàng)建另外一個函數(shù)。在javascript中沒有塊級作用域,一般為了給某個函數(shù)申明一些只有該函數(shù)才能使用的局部變量時,我們就會用到閉包,我們來詳細探討下
    2015-07-07
  • js實現(xiàn)查詢商品案例

    js實現(xiàn)查詢商品案例

    這篇文章主要為大家詳細介紹了js實現(xiàn)查詢商品案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • ES2015 Symbol 一種絕不重復的值

    ES2015 Symbol 一種絕不重復的值

    這篇文章主要介紹了Symbol是ES2015新增的一種值類型數(shù)據(jù),表示一種絕不重復的值,需要的朋友可以參考下
    2016-12-12
  • JS彈窗 JS彈出DIV并使整個頁面背景變暗功能的實現(xiàn)代碼

    JS彈窗 JS彈出DIV并使整個頁面背景變暗功能的實現(xiàn)代碼

    這篇文章主要介紹了JS彈窗 JS彈出DIV并使整個頁面背景變暗功能的實現(xiàn)代碼,需要的朋友可以參考下
    2018-04-04
  • js實現(xiàn)數(shù)組的扁平化

    js實現(xiàn)數(shù)組的扁平化

    這篇文章主要為大家介紹了js實現(xiàn)數(shù)組扁平化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 原生js實現(xiàn)彈幕效果

    原生js實現(xiàn)彈幕效果

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)彈幕效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

融水| 绩溪县| 铁岭县| 安阳市| 黑龙江省| 稷山县| 华蓥市| 土默特左旗| 南康市| 铜梁县| 天峨县| 香格里拉县| 富平县| 宜兰市| 南靖县| 邓州市| 马关县| 云林县| 望奎县| 新龙县| 如东县| 乌拉特后旗| 古蔺县| 田东县| 昭平县| 肥乡县| 东乡族自治县| 车险| 台东县| 瑞安市| 河北省| 潞西市| 湘潭市| 仙居县| 镇平县| 双柏县| 花莲市| 漠河县| 邵阳市| 阿尔山市| 中西区|