成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javaScript中的函數(shù)應(yīng)用

wenhai.he / 675人閱讀

摘要:概要當(dāng)中的函數(shù)站在不同的角度有不同的分類和應(yīng)用本文站在高階函數(shù)的角度來(lái)討論當(dāng)中函數(shù)的應(yīng)用場(chǎng)景。解決老版本瀏覽器函數(shù)兼容性問(wèn)題判斷數(shù)據(jù)類型高階函數(shù)實(shí)現(xiàn)也就是面向切面編程在中這個(gè)概念基礎(chǔ)且重要。

概要

js當(dāng)中的函數(shù)站在不同的角度有不同的分類和應(yīng)用,本文站在高階函數(shù)的角度來(lái)討論js當(dāng)中函數(shù)的應(yīng)用場(chǎng)景。

首先明確高階函數(shù)定義:

函數(shù)可以作為參數(shù)被傳遞

函數(shù)可以作為返回值輸出

應(yīng)用場(chǎng)景 函數(shù)作為參數(shù)被傳遞

這種情況其實(shí)是比較常見(jiàn)的,日常用的挺多的,例如ajax請(qǐng)求成功之后的callback函數(shù)、各種插件,框架當(dāng)中的鉤子函數(shù)等等。下面舉個(gè)我們常用的例子:

var tmpAry=[2,1,3];

tmpAry.sort(function(a,b){
    return a-b;
});
console.log(tmpAry);   //[1,2,3]

目的:把函數(shù)中易變或公用邏輯抽離,封裝成函數(shù)參數(shù),隔離變與不變部分,達(dá)到更好的封裝和復(fù)用。

函數(shù)作為返回值輸出

這個(gè)其實(shí)我在日常寫(xiě)代碼中用的比較少,但并不能說(shuō)明這個(gè)不常見(jiàn),所以下面我會(huì)多舉幾個(gè)例子。

解決老版本瀏覽器bind函數(shù)兼容性問(wèn)題

Function.prototype.bind=function(context){
    var self=this;
    return function(){
        return self.apply(context,args);
    }
}
判斷數(shù)據(jù)類型
var isType=function(type){
    return function(obj){
        return Object.prototype.toString.call(obj)==="[object "+ type + "]";
    }
}
var isString=isType("String");
console.log(isString("gcy"));  //true
高階函數(shù)實(shí)現(xiàn)aop

AOP也就是面向切面編程,在java中這個(gè)概念基礎(chǔ)且重要。具體就是通過(guò)reflect或動(dòng)態(tài)代理(jdk動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理)動(dòng)態(tài)的在業(yè)務(wù)函數(shù)之前或之后添加一些
可復(fù)用的代碼邏輯,例如典型的日志統(tǒng)計(jì)、權(quán)限控制等等。用aop的目的就是希望業(yè)務(wù)邏輯模塊高內(nèi)聚,同時(shí)達(dá)到非業(yè)務(wù)公共模塊可復(fù)用,易維護(hù)。

Function.prototype.before=function (beforefn) {
    var _self=this;//保存原函數(shù)的引用
    return function () {  //代理函數(shù)
        beforefn.apply(this,arguments);
        _self.apply(this,arguments);
    }
};

Function.prototype.after=function (afterfn) {
    var _self=this;
    return function () {
        var ret=_self.apply(this,arguments);
        afterfn.apply(this,arguments);
        return ret;  //執(zhí)行原函數(shù),并返回原函數(shù)的執(zhí)行結(jié)果
    }
}
var  func=function () {
    console.log("ing");
}
func=func.before(function () {
    console.log("before")
}).after(function () {
    console.log("after");
})
func(); //before  ing  after

這個(gè)其實(shí)有很多應(yīng)用場(chǎng)景,比如統(tǒng)計(jì)函數(shù)執(zhí)行時(shí)間,動(dòng)態(tài)改變函數(shù)參數(shù)等等。

function currying

首先currying的概念是部分求值,具體含義就是指動(dòng)態(tài)的接受一些參數(shù),不立即求值,在需要計(jì)算求值時(shí)訪問(wèn)之前閉包中保存的參數(shù),一次性進(jìn)行求值。
下面是一個(gè)部分求值通用的currying函數(shù)。

var currying=function (fn) {
    var args=[];
    return function () {
        if(arguments.length===0){
            return fn.apply(this,args);
        }else{
            [].push.apply(args,arguments);
            return arguments.callee;  //指向當(dāng)前匿名函數(shù),以便于參數(shù)連續(xù)暫存
        }
    }
}
var cost=(function () {
    var money=0;
    return function () {
        for(var i=0,len=arguments.length;i
總結(jié)

其實(shí)高階函數(shù)應(yīng)用場(chǎng)景很多,我只是總結(jié)列舉了一些自己學(xué)習(xí)中碰到的典型例子,以后遇到一些適當(dāng)?shù)?會(huì)繼續(xù)完善。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69885.html

相關(guān)文章

  • 前端每周清單半年盤(pán)點(diǎn)之 JavaScript

    摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。背后的故事本文是對(duì)于年之間世界發(fā)生的大事件的詳細(xì)介紹,闡述了從提出到角力到流產(chǎn)的前世今生。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開(kāi)發(fā)教程、工程實(shí)踐、深度閱讀、開(kāi)源項(xiàng)目、巔峰人生等欄目。歡迎...

    Vixb 評(píng)論0 收藏0
  • 【譯】每個(gè)JavaScript 開(kāi)發(fā)者應(yīng)該了解的10個(gè)面試題

    摘要:避免脆弱的基類問(wèn)題。紅牌警告沒(méi)有提到上述任何問(wèn)題。單向數(shù)據(jù)流意味著模型是單一的事實(shí)來(lái)源。單向數(shù)據(jù)流是確定性的,而雙向綁定可能導(dǎo)致更難以遵循和理解的副作用。原文地址 1. 你能說(shuō)出兩種對(duì) JavaScript 應(yīng)用開(kāi)發(fā)者而言的編程范式嗎? 希望聽(tīng)到: 2. 什么是函數(shù)編程? 希望聽(tīng)到: 3. 類繼承和原型繼承的不同? 希望聽(tīng)到 4. 函數(shù)式編程和面向?qū)ο缶幊痰膬?yōu)缺點(diǎn)? ...

    mykurisu 評(píng)論0 收藏0
  • 學(xué)習(xí)React之前你需要知道的的JavaScript基礎(chǔ)知識(shí)

    摘要:和類在開(kāi)始時(shí)遇到類組件,只是需要有關(guān)類的基礎(chǔ)。畢竟,中的條件呈現(xiàn)僅再次顯示大多數(shù)是而不是特定的任何內(nèi)容。 在我的研討會(huì)期間,更多的材料是關(guān)于JavaScript而不是React。其中大部分歸結(jié)為JavaScript ES6以及功能和語(yǔ)法,但也包括三元運(yùn)算符,語(yǔ)言中的簡(jiǎn)寫(xiě)版本,此對(duì)象,JavaScript內(nèi)置函數(shù)(map,reduce,filter)或更常識(shí)性的概念,如:可組合性,可重用...

    bitkylin 評(píng)論0 收藏0
  • Express 實(shí)戰(zhàn)(一):概覽

    摘要:一個(gè)標(biāo)準(zhǔn)性的事件就是年的橫空出世。引擎快速處理能力和異步編程風(fēng)格,讓開(kāi)發(fā)者從多線程中解脫了出來(lái)。其次,通過(guò)異步編程范式將其高并發(fā)的能力發(fā)揮的淋漓盡致。它也僅僅是一個(gè)處理請(qǐng)求并作出響應(yīng)的函數(shù),并無(wú)任何特殊之處。 showImg(https://segmentfault.com/img/remote/1460000010819116); 在正式學(xué)習(xí) Express 內(nèi)容之前,我們有必要從大...

    zhaochunqi 評(píng)論0 收藏0
  • JavaScript 編程精解 中文第三版 十二、項(xiàng)目:編程語(yǔ)言

    摘要:來(lái)源編程精解中文第三版翻譯項(xiàng)目原文譯者飛龍協(xié)議自豪地采用谷歌翻譯部分參考了編程精解第版確定編程語(yǔ)言中的表達(dá)式含義的求值器只是另一個(gè)程序。若文本不是一個(gè)合法程序,解析器應(yīng)該指出錯(cuò)誤。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Project: A Programming Language 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用...

    Near_Li 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<