函數(shù)是用于封裝一段完成特定功能的代碼帆喇,相當(dāng)于將一條或者多條語(yǔ)句組成的代碼塊包裹起來。用戶在使用時(shí)厅目,只需關(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ù)可以賦值給一個(gè)變量疾渣,賦值為對(duì)象的屬性,作為參數(shù)傳入別的函數(shù)路星,作為結(jié)果返回
調(diào)用:函數(shù)寫完后。并不是立即執(zhí)行的诱桂,想讓他發(fā)貨作用洋丐,那么需要調(diào)用這個(gè)函數(shù)。
函數(shù)名稱(參數(shù)1挥等,參數(shù)2友绝,......)
變量的作用域:
變量的使用是需要先聲明后使用的,而且變量的使用也是有范圍的肝劲。這個(gè)范圍被稱為變量的作用域迁客。
分為 3種(1)全局變量
? ? ? ? ? ? ? (2)局部變量
? ? ? ? ? ? ? (3)塊級(jí)變量(Es6新增)、
此外還需要注意的是 當(dāng)局部變量和全局變量重名是辞槐,局部變量的優(yōu)先級(jí)高于全局變量掷漱。例
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ù):
這個(gè)是沒有函數(shù)名稱的函數(shù)。將聲明的函數(shù)賦值給一個(gè)變量榄檬。這種方法可以有效的避免全局變量的污染以及函數(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)建一個(gè)獨(dú)立的作用域,避免被同名變量覆蓋
此外在處理事件的時(shí)候也可以用匿名函數(shù)喳魏。
回調(diào)函數(shù):
回調(diào)函數(shù)指的是一個(gè)函數(shù)A作為參數(shù)傳遞給一個(gè)函數(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ù)值得是在一個(gè)函數(shù)內(nèi)部存在另外一個(gè)函數(shù)的聲明迷郑。
特點(diǎn):內(nèi)層函數(shù)只能在外層函數(shù)作用域內(nèi)執(zhí)行,在內(nèi)層函數(shù)執(zhí)行的過程中创倔,若需要引入某個(gè)變量嗡害,首先會(huì)在當(dāng)前作用域中尋找,若未找到畦攘,則繼續(xù)向上一層級(jí)的作用域中尋找霸妹,直到全局作用域,我們稱這種鏈?zhǔn)降牟樵冴P(guān)系為作用域鏈知押。
遞歸函數(shù):遞歸調(diào)用是函數(shù)嵌套調(diào)用中一種特殊的調(diào)用叹螟。它指的是一個(gè)函數(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ù)的。
特點(diǎn):閉包類似于面向?qū)ο蟮臄?shù)據(jù)隱藏和封裝市咽,所以在前面時(shí)候 JavaScript是支持面向?qū)ο蟮摹?/p>