Javascript 高階函數使用介紹

來源:互聯網
上載者:User

Javascript 高階函數使用介紹

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

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

  ?

1

2

3

4

5

6

function funcTest(f){

//簡易判斷一下實參是否為函數

if((typeof f)==”function”){

f();

}}

funcTest(function(){ });

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

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

  ?

1

2

3

4

function funcTest(){

return function(){};

}

var f=funcTest();

  調用funcTest返回一個函數。

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

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//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");

//12

var data2=add("int")("1","2");

//3

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

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

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

  1,回呼函數

  ?

1

2

3

4

5

6

7

8

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,資料篩選與排序演算法

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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元素事件定義

  ?

1

2

3

4

5

6

7

8

9

10

11

<html><title></title>

<body><input type=”button” value=”ClickMe” id=”myBtn” >

<script type=”text/javascript>

var btnClick=document.getElementById(“myBtn”);

//測試環境為FireFox

btnClick. 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.