iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 15
0

今天來看看函式Functions
在JS這個物件導向語言裡,其函式的特性被稱為一級函式

一級函式First Class Functions

開發者對別的基礎型別做的事,也可以對函式去做,因為函式就是物件,而物件就是名稱/值的組合。

開發者可以指派函式給變數,將函式傳入另一個函式,也可以用實體語法建立函數。
函式可以有屬性和方法,因為他就是物件,所以它可以連結到物件、屬性、其他函式(Methood)

關於一級函式的介紹,可以參考:
維基百科頭等函式
ITome專欄物件導向語言中的一級函式 by林信良

而JS的函式還有隱藏的物件屬性,其中最重要的有兩個:

NAME

即名子屬性,然而名子不是必須的,函式也可以沒有名子(匿名函式)

CODE

即程式屬性code property,這個屬性的內容,就是開發者在編輯器上開發時,寫在函式內的程式碼。
我們寫的程式碼會成為這個屬性的值,而CODE屬性的特性是,它的內容是可以呼叫執行的。

來看看以下程式碼

function sport(){
	console.log('運動');
}

因為函式就是物件,所以我們可以接著這樣寫

sport.basketball  = '打籃球';
console.log(sport.basketball);

結果是

為何沒有報出錯誤訊息?
因為JS函式就是物件,物件可以自由擴增屬性,我們等於對sport這個函式物件,新增一個basketball屬性,其值為字串打籃球

那這個函式,它的名子、物件屬性NAME是什麼呢?
就是greet
當我們欲呼叫執行函式,在編輯器寫上greet(),其實就是透過函式屬性名子greet去呼叫這個函式物件的定義,而()就會創造執行環境,執行這個函式物件程式屬性裡的內容,也就是console.log('hi');這段程式碼。 
 
 
 
 
小結
今天複習了函式就是物件這個觀念
先前我只曉得函式是物件型別,可以自由擴增屬性,但沒想深入想過函式的名子也是屬性(NAME)這件事。

今天的筆記內容可以參照Udemy課程:JavaScript 全攻略:克服JS 的奇怪部分4-34


上一篇
Day14 JSON與物件實體
下一篇
Day16 函式陳述句與函式表示式
系列文
JavaScript基礎二三事30

尚未有邦友留言

立即登入留言