函數(shù)的定義
在JavaScript中,使用函數(shù)前需要先定義才能調(diào)用。函數(shù)的定義包括三個(gè)部分:函數(shù)名、參數(shù)列表和函數(shù)體。函數(shù)的定義格式為:function 函數(shù)名([參數(shù)1, 參數(shù)2,...]){ 函數(shù)執(zhí)行部分;
在JavaScript中,使用函數(shù)前需要先定義才能調(diào)用。函數(shù)的定義包括三個(gè)部分:函數(shù)名、參數(shù)列表和函數(shù)體。函數(shù)的定義格式為:function 函數(shù)名([參數(shù)1, 參數(shù)2,...]){ 函數(shù)執(zhí)行部分; return 表達(dá)式;}。
例1:通過函數(shù)完成一個(gè)打招呼的程序。
例2:定義一個(gè)函數(shù),能實(shí)現(xiàn)打招呼程序。
例3:使用參數(shù)實(shí)現(xiàn)向不同的人打不同的招呼。
函數(shù)的參數(shù)
在JavaScript函數(shù)中,函數(shù)的參數(shù)有兩種形式:形參和實(shí)參。
形參是在函數(shù)定義時(shí)指定的參數(shù)。而實(shí)參是在函數(shù)調(diào)用時(shí)指定的參數(shù)。
例4:為函數(shù)定義return返回值,改進(jìn)例3的問題。
為什么函數(shù)需要返回值?函數(shù)在定義時(shí)要滿足兩個(gè)原則:內(nèi)聚性強(qiáng)和耦合性弱。內(nèi)聚性強(qiáng)表示函數(shù)的功能要專一,為了完成某個(gè)特定的任務(wù)而定義。而耦合性弱表示函數(shù)與函數(shù)之間盡量不要產(chǎn)生任何依賴關(guān)系。
函數(shù)在內(nèi)存中的存儲(chǔ)形式
在JavaScript中,無論是有名函數(shù)還是匿名函數(shù),都會(huì)返回函數(shù)在內(nèi)存中的首地址。
棧內(nèi)存用于存放簡(jiǎn)單類型的數(shù)據(jù),如String、Number、Boolean。
堆內(nèi)存用于存儲(chǔ)復(fù)雜類型的數(shù)據(jù),如Object。數(shù)組也存儲(chǔ)在堆內(nèi)存中。
代碼段常用于存儲(chǔ)函數(shù)。
需要注意的是,存儲(chǔ)在堆內(nèi)存和代碼段中的數(shù)據(jù)都是一塊連續(xù)的內(nèi)存地址。一個(gè)函數(shù)的名稱也會(huì)返回函數(shù)在內(nèi)存中的首地址。
根據(jù)以上結(jié)論,對(duì)于語句var i display;,相當(dāng)于將display函數(shù)在內(nèi)存中的首地址賦值給變量i。
如果在display的名字后面添加一個(gè)圓括號(hào),代表找到這塊內(nèi)存地址并執(zhí)行一段連續(xù)的代碼。
無論一個(gè)函數(shù)是有名函數(shù)還是匿名函數(shù),都會(huì)返回函數(shù)在內(nèi)存中的首地址。
一個(gè)函數(shù)無論有沒有名字,都會(huì)返回函數(shù)在內(nèi)存中的首地址。簡(jiǎn)化之,我們把這種沒有任何名字的函數(shù)稱之為“匿名函數(shù)”。