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

Javascript閉包與函數(shù)柯里化淺析

 更新時間:2016年06月22日 11:07:50   作者:沫魚  
這篇文章主要介紹Javascript閉包與柯里化,通俗易懂,需要的朋友可以參考下。

閉包和柯里化都是JavaScript經(jīng)常用到而且比較高級的技巧,所有的函數(shù)式編程語言都支持這兩個概念,因此,我們想要充分發(fā)揮出JavaScript中的函數(shù)式編程特征,就需要深入的了解這兩個概念,閉包事實(shí)上更是柯里化所不可缺少的基礎(chǔ)。

一、柯里化的概念

  在計(jì)算機(jī)科學(xué)中,柯里化是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。這個技術(shù)由Christopher Strachey以邏輯學(xué)家 Haskell Curry 命名的,盡管它是 Moses Schnfinkel 和 Gottlob Frege 發(fā)明的。在直覺上,柯里化聲稱“如果你固定某些參數(shù),你將得到接受余下參數(shù)的一個函數(shù)”。所以對于有兩個變量的函數(shù)yx,如果固定了y = 2,則得到有一個變量的函數(shù)2x。

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

var adder = function(num){
  return function(y){
     return num + y;
  }
}
var inc = adder(1);
var dec = adder(-1)

這里的inc/dec兩個變量事實(shí)上是兩個新的函數(shù),可以通過括號來調(diào)用,比如下例中的用法:

//inc, dec現(xiàn)在是兩個新的函數(shù),作用是將傳入的參數(shù)值(+/-)1
print(inc(99));//100
print(dec(101));//100
print(adder(100)(2));//102
print(adder(2)(100));//102

二、柯里化的應(yīng)用

  根據(jù)柯里化的特性,我們可以寫出更有意思的代碼,比如在前端開發(fā)中經(jīng)常會遇到這樣的情況,當(dāng)請求從服務(wù)端返回后,我們需要更新一些特定的頁面元素,也就是局部刷新的概念。使用局部刷新非常簡單,但是代碼很容易寫成一團(tuán)亂麻。而如果使用柯里化,則可以很大程度上美化我們的代碼,使之更容易維護(hù)。我們來看一個例子:

//update會返回一個函數(shù),這個函數(shù)可以設(shè)置id屬性為item的web元素的內(nèi)容
function update(item){
  return function(text){
     $("div#"+item).html(text);
  }
}
//Ajax請求,當(dāng)成功是調(diào)用參數(shù)callback
function refresh(url, callback){
  var params = {
     type : "echo",
     data : ""
  };
  $.ajax({
     type:"post",
     url:url,
     cache:false,
     async:true,
     dataType:"json",
     data:params,
     //當(dāng)異步請求成功時調(diào)用
     success: function(data, status){
        callback(data);
     },
     //當(dāng)請求出現(xiàn)錯誤時調(diào)用
     error: function(err){
        alert("error : "+err);
     }
  });
}
refresh("action.do?target=news", update("newsPanel"));
refresh("action.do?target=articles", update("articlePanel"));
refresh("action.do?target=pictures", update("picturePanel"));
其中,update函數(shù)即為柯里化的一個實(shí)例,它會返回一個函數(shù),即:
update("newsPanel") = function(text){
  $("div#newsPanel").html(text);
}

由于update(“newsPanel”)的返回值為一個函數(shù),需要的參數(shù)為一個字符串,因此在refresh的Ajax調(diào)用中,當(dāng)success時,會給callback傳入服務(wù)器端返回的數(shù)據(jù)信息,從而實(shí)現(xiàn)newsPanel面板的刷新,其他的文章面板articlePanel,圖片面板picturePanel的刷新均采取這種方式,這樣,代碼的可讀性,可維護(hù)性均得到了提高。

以上就是本文的全部內(nèi)容,了解更多JavaScript的語法,大家可以查看:《JavaScript 參考教程》、《JavaScript代碼風(fēng)格指南》,也希望大家多多支持腳本之家。

相關(guān)文章

  • 帶你了解JavaScript的運(yùn)行原理

    帶你了解JavaScript的運(yùn)行原理

    這篇文章主要介紹了關(guān)于JavaScript的運(yùn)行原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 詳解JavaScript中的表單驗(yàn)證

    詳解JavaScript中的表單驗(yàn)證

    這篇文章主要介紹了JavaScript中的表單驗(yàn)證,是JS在前端和服務(wù)器端通信部分相關(guān)的重要知識,需要的朋友可以參考下
    2015-06-06
  • JavaScript 學(xué)習(xí)筆記之操作符(續(xù))

    JavaScript 學(xué)習(xí)筆記之操作符(續(xù))

    上篇文章我們講解了javascript的操作符中的一元操作符、位操作符、布爾操作符,今天我們繼續(xù)講解剩下的幾個操作符,包括乘性操作符、加性操作符、相等操作符、條件操作符、賦值操作符、逗號操作符,小伙伴們仔細(xì)研讀下吧,對提高自己對于javascript的理解很有幫助。
    2015-01-01
  • 自動化測試讀寫64位操作系統(tǒng)的注冊表

    自動化測試讀寫64位操作系統(tǒng)的注冊表

    本文主要介紹自動化測試讀寫64位操作系統(tǒng)的注冊表,這里提供詳細(xì)的教程來實(shí)現(xiàn)自動化讀寫64位操作系統(tǒng)的注冊表,希望能幫助測試軟件的朋友,有興趣的小伙伴可以參考下
    2016-08-08
  • JavaScript中join()方法的使用簡介

    JavaScript中join()方法的使用簡介

    這篇文章主要介紹了JavaScript中join()方法的使用簡介,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • 簡單談?wù)凧avascript函數(shù)中的arguments

    簡單談?wù)凧avascript函數(shù)中的arguments

    在JavaScript中,arguments對象是比較特別的一個對象,實(shí)際上是當(dāng)前函數(shù)的一個內(nèi)置屬性。下面這篇文章主要介紹了關(guān)于Javascript函數(shù)中的arguments面貌以及如何轉(zhuǎn)化為數(shù)組的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 深入學(xué)習(xí)JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值

    深入學(xué)習(xí)JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值

    這篇文章主要介紹了深入學(xué)習(xí)JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • 深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解

    深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解

    這篇文章主要介紹了深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解,本文講解了一般理論、按值傳遞、按引用傳遞、按共享傳遞(Call by sharing)、按共享傳遞是按值傳遞的特例等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • JavaScript中的small()方法使用詳解

    JavaScript中的small()方法使用詳解

    這篇文章主要介紹了JavaScript中的small()方法使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • Javascript中this的用法詳解

    Javascript中this的用法詳解

    本文主要是重新回顧一下自己關(guān)于this的理解,發(fā)現(xiàn)自己的理解確實(shí)是有些偏差的,記錄一下,希望對大家有所幫助
    2014-09-09

最新評論

万荣县| 忻城县| 平乐县| 崇左市| 香河县| 项城市| 威宁| 河源市| 博爱县| 义马市| 嘉鱼县| 乡城县| 大名县| 怀柔区| 凤城市| 呼图壁县| 英德市| 东乡县| 南雄市| 平潭县| 方山县| 南召县| 全椒县| 浦东新区| 正镶白旗| 漾濞| 肥西县| 兴国县| 行唐县| 深水埗区| 绵阳市| 珲春市| 遵化市| 新田县| 葵青区| 上高县| 盐源县| 平泉县| 阿克陶县| 荆州市| 镇沅|