Javascript 高階函數使用介紹,javascript高階

來源:互聯網
上載者:User

Javascript 高階函數使用介紹,javascript高階

高階函數(higher-order function)—如果一個函數接收的參數為或返回的值為函數,那麼我們可以將這個函數稱為高階函數。眾所周知,JavaScript是一種弱類型的語言:JavaScript的函數既不對輸入的參數,也不對函數的輸出值作強定義和類型檢查,那麼函數可以成為參數,也可以成為輸出值,這就體現了JavaScript對高階函數的原生支援。

一、參數為函數的高階函數:

function funcTest(f){  //簡易判斷一下實參是否為函數if((typeof f)==”function”){f();}}funcTest(function(){ });

這是一個簡易的將參數作為函數的高階函數。在調用funcTest時,輸入一個函數作為參數,在funcTest內部執行這個輸入的匿名函數,當然這樣的程式碼片段沒有什麼實際意義。

一、傳回值為函數的高階函數:

function funcTest(){return function(){};}var f=funcTest();

調用funcTest返回一個函數。

二、一個複雜一點的例子:

//Number類型相加  function addInt(a,b){return parseInt(a)+parseInt(b); }//String類型相加function addString(a,b){return a.toString()+ b.toString(); }  function add(type){if(type==="string"){return addString;}else{return addInt; }}var data1=add("string")("1","2");//12var data2=add("int")("1","2");//3

以上樣本實現了一個String類型相加與Number類型相加的分離。調用add函數如果輸入參數為”string”時,輸出一個字串拼接函數;如果輸入參數為”int”則輸出數字相加函數。

三、高階函數的實際作用:

上面的程式碼範例基本說明什麼是高階函數,下面來看看高階函數與我們實際編程有什麼關係:

1,回呼函數

function callback(value){alert(value);}function funcTest(value,f)//f實參檢測,檢查f是否為函數 if(typeof callback==='function'){f(value);}}funcTest(‘1',callback);//1

樣本在當調用funcTest時,funcTest內部會調用callback函數,即實現回調。

2,資料篩選與排序演算法

var arr=[0,2,11,9,7,5];//排序演算法function funcComp(a,b){if(a<b){return -1;}else if(a>b){return 1;}else{return 0;}}//過濾演算法function funcFilter(item,index,array){return item>=5;}//數組順序排列arr.sort(funcComp);alert(arr.join(','));//0,2,5,7,9,11//篩選數組var arrFilter=arr.filter(funcFilter);alert(arr.join(‘,'))//5,7,9,11

3,DOM元素事件定義

<html><title></title><body><input type=”button” value=”ClickMe” id=”myBtn” ><script type=”text/javascript>var btnClick=document.getElementById(“myBtn”);//測試環境為FireFoxbtnClick. addEventListener(“click”,function(e){alert(“I'm a button!”);//I'm a button},false);</script></body></html>

在以上樣本中,文檔中定義了一個id為myBtn的按鈕,js指令碼為其添加了一個點擊事件,其中addEventListener的第二個參數是一個函數。

結束語:高階函數並不是JavaScript的專利,但絕對是JavaScript編程的利器。高階函數實際上就是對基本演算法的再度抽象,我們可以利用這一點,提高代碼的抽象度,實現最大限度的代碼重用,編寫出更簡潔、更利於重構的代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.