函數(shù)是用于封裝一段完成特定功能的代碼,相當(dāng)于將一條或者多條語句組成的代碼塊包裹起來。用戶在使用時,只需關(guān)心參數(shù)和返回值,就能完成特定的功能。
function 函數(shù)名(參數(shù)1,參數(shù)2,.......){
? ? ? ? //函數(shù)體
}
函數(shù)分為有參函數(shù)和無參函數(shù)
function greet(){
? ? console.log('Hello body');
}
function greet(a,b){
? ? a=parseInt(a);
? ? b=parseInt(a);
? ? return a>=b?a:b;
}
在Es6中還新增了含有默認(rèn)值的參數(shù)
函數(shù)可以賦值給一個變量,賦值為對象的屬性,作為參數(shù)傳入別的函數(shù),作為結(jié)果返回
調(diào)用:函數(shù)寫完后。并不是立即執(zhí)行的,想讓他發(fā)貨作用,那么需要調(diào)用這個函數(shù)。
函數(shù)名稱(參數(shù)1,參數(shù)2,......)
變量的作用域:
變量的使用是需要先聲明后使用的,而且變量的使用也是有范圍的。這個范圍被稱為變量的作用域。
分為 3種(1)全局變量
? ? ? ? ? ? ? (2)局部變量
? ? ? ? ? ? ? (3)塊級變量(Es6新增)、
此外還需要注意的是 當(dāng)局部變量和全局變量重名是,局部變量的優(yōu)先級高于全局變量。例
var a='one'
function test(){
? ? var a='two'
? ? console.log(a)
}
test();
for(let a=0;a<3;++a){
? ? console.log(a);
}
console.log(a);
輸出結(jié)果為:
two
0
1
2
one
匿名函數(shù):
這個是沒有函數(shù)名稱的函數(shù)。將聲明的函數(shù)賦值給一個變量。這種方法可以有效的避免全局變量的污染以及函數(shù)名的沖突。但是這種方法定義需要注意 函數(shù)定義必須在調(diào)用前
其中匿名函數(shù)有助于分為3種。如下:
var fun=function sum(num1,num2){
? ? return num1+num2;
};
fn(2,4);
自調(diào)用函數(shù):
(function (num1,num2){
? ? return num1+num2;
})(1,2)
?自調(diào)用函數(shù)也被稱為立即執(zhí)行函數(shù),是函數(shù)表達(dá)式,不能是函數(shù)聲明。創(chuàng)建一個獨(dú)立的作用域,避免被同名變量覆蓋
此外在處理事件的時候也可以用匿名函數(shù)。
回調(diào)函數(shù):
回調(diào)函數(shù)指的是一個函數(shù)A作為參數(shù)傳遞給一個函數(shù)B,然后在B的函數(shù)體內(nèi)調(diào)用函數(shù)A。函數(shù)A稱為回調(diào)函數(shù)。
例:
function cal(num.num2,fn){
? ? return fn(num1,num2);
}
console.log(cal(45,55,function(a,b){
? ? return a+b;
}));
console.log(cal(10,20,function(a,b){
? ? return a*b;
}));

嵌套與遞歸:
嵌套函數(shù)值得是在一個函數(shù)內(nèi)部存在另外一個函數(shù)的聲明。
特點:內(nèi)層函數(shù)只能在外層函數(shù)作用域內(nèi)執(zhí)行,在內(nèi)層函數(shù)執(zhí)行的過程中,若需要引入某個變量,首先會在當(dāng)前作用域中尋找,若未找到,則繼續(xù)向上一層級的作用域中尋找,直到全局作用域,我們稱這種鏈?zhǔn)降牟樵冴P(guān)系為作用域鏈。
遞歸函數(shù):遞歸調(diào)用是函數(shù)嵌套調(diào)用中一種特殊的調(diào)用。它指的是一個函數(shù)在其函數(shù)體內(nèi)調(diào)用自身的過程,這種函數(shù)稱為遞歸函數(shù)。
遞歸函數(shù)在遍歷不固定的多位數(shù)組是特別合適,但是他占用的內(nèi)存和資源多,并且難以維護(hù),所以在開發(fā)使用需要注意嘎不是的遞歸調(diào)用。
閉包函數(shù):在JavaScript中,內(nèi)嵌套函數(shù)定義在外層函數(shù)中的所有變量和函數(shù),并包括其外層函數(shù)能訪問的所有變量和函數(shù)。但是需要注意的是在函數(shù)外部是不能訪問函數(shù)的內(nèi)部變量和嵌套函數(shù)的。
特點:閉包類似于面向?qū)ο蟮臄?shù)據(jù)隱藏和封裝,所以在前面時候 JavaScript是支持面向?qū)ο蟮摹?/p>