javascript學(xué)習(xí)日記之函數(shù)(一)

在編程的世界里函數(shù)無處不在,任何語言里都是一個(gè)核心的概念。
所以對函數(shù)的認(rèn)知和掌握就顯得非常重要。

我總結(jié)了我自己學(xué)習(xí)函數(shù)的知識點(diǎn):

  • 函數(shù)的定義和調(diào)用
  • 回調(diào)函數(shù)
  • 自調(diào)函數(shù)
  • 內(nèi)嵌函數(shù)
  • 以函數(shù)為返回值的函數(shù)
  • 重定義自身的函數(shù)
  • 閉包

一 函數(shù)的定義和調(diào)用

函數(shù)的定義 有兩種方式 一種就是函數(shù)的聲明 另一種就是函數(shù)表達(dá)式。
下面我們來看一下函數(shù)的兩種定義:

//函數(shù)的聲明
 function f(a,b){
  return a+b;
 }
//函數(shù)表達(dá)式 (function expression)
var add = function(a,b){
  return a +b;
}//function 部分 又稱匿名函數(shù)

調(diào)用函數(shù)聲明時(shí)直接函數(shù)名稱 +()里的參數(shù)就行了比如上面函數(shù)的調(diào)用:

f(3,4) //7
add(3,4) //7

二 回調(diào)函數(shù)
1.通過函數(shù)表達(dá)式 我們知道函數(shù)可以賦值給變量,既然可以賦值 我們試試把函數(shù)當(dāng)作參數(shù)傳遞呢?嘗試一下吧
首先我們得定義一個(gè)以兩個(gè)函數(shù)為參數(shù)的函數(shù) 并求他們的返回值之和

function funAdd (a,b){
   return a() +b();
}
//定義兩個(gè)函數(shù)
function first {
 return 1;
}
function sencond {
reuturn 2;
}
//first和sencond當(dāng)作參數(shù)傳遞給funAdd
funAdd(first,sencond); //3

事實(shí)上,我們可以用匿名函數(shù)來代替first和second兩個(gè)函數(shù)

function funAdd {
  function(){return 1;},function(){return 2;}
}

2.那么什么是回調(diào)函數(shù)呢?
當(dāng)函數(shù)A傳遞給函數(shù)B時(shí),并且有B來執(zhí)行A時(shí),此時(shí)函數(shù)A就是回調(diào)函數(shù)(callback functions),如果函數(shù)A是一個(gè)無名函數(shù) 此時(shí)函數(shù)A就是匿名回調(diào)函數(shù)。

在編程語言的開發(fā)中,我們常常需要將一個(gè)函數(shù)返回值傳遞給另一個(gè)函數(shù)。
所以我們先寫兩個(gè)函數(shù)

function one (a,b,c){
 var i ,ar =[];
 for (i= 0 ;i<3;i++){
  ar[i] = arguments[i]*2;
}
  return ar;
}//循環(huán)將三個(gè)參數(shù)分別乘以2 并且以數(shù)組的方式返回ar;
function two(a){
 return a+1;
}//只接受一個(gè)參數(shù) 且+1返回
alert(one(1,2,3)); //2,4 ,6
alert(two(1)); //2 
//測試一下,沒有問題0-0

現(xiàn)在我們要將one函數(shù) 三個(gè)參數(shù)傳遞給two函數(shù)

var myarr =[];
myarr =one(1,2,3)
//先存儲在myarr 數(shù)組里 然后循環(huán)遍歷給two函數(shù)
for(var i = 0;i<3;i++){
 myarr[i] = two(myarr[i]);
}
alert(myarr);//3,5,7

很顯然,代碼有點(diǎn)過多 我們得像辦法想讓代碼量減少一點(diǎn)。既然想減少代碼量 我們就看看代碼有哪些共同的部分? 上述代碼 一眼看到兩個(gè)for循環(huán)
這顯然有點(diǎn)多余,我們得讓他合并調(diào)
既然函數(shù)可以傳遞所以我們把two 函數(shù)作為參數(shù)放進(jìn)one 傳遞
所以我們修改一下one 函數(shù)

function one (a,b,c,callback){
     var i ,ar =[];
    for (i= 0;i<3;i++){
    ar[i] =callback(arguments[i]*2);
}
return ar;
}
myarr = one(11,22,33,two);
alert(myarr); //23 45 ,67

我們還可以通過匿名函數(shù)來代替two()

myarr = one(1,2,3,function(a){
  return a+2;
})
alert(myarr) //4,6,8

3,總結(jié)使用回調(diào)函數(shù)的好處

  • 可以不使用命名的情況,傳遞函數(shù)(節(jié)省全局變量)
  • 一個(gè)函數(shù)的調(diào)用操作委托給另一個(gè)函數(shù)(減少代碼工作量)
  • 有助于提升性能(尤其是匿名回調(diào)函數(shù))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容