一般我們使用函式的方式是我們定義一個具名的函式,然後在其他的地方可以乎叫它,但其實也另一種呼叫函式的形式 – 立即函式,如同它的字意上的意思,就是可以不用呼叫直接使用

立即函式的寫法也相當簡單,就把原本的函式用一個小刮號包起來後,最後尾巴再加上一個小刮號,就可以用了,如下圖所示 ,最後尾巴的小刮號,可以選擇要放到該表達式裡還是該表達式外

雖然它可以立即的被執行,但如果今天要直接在該表達式的函式外執行它,剛會發生該達表式沒被定義的情況,如下圖所示

由於它通常是直接執行某函式,且無法在函式外被呼叫,所以通常使用立即函式時,都不用再特別給名稱了,如下圖所示

那我們來總結一下它的特點

1. 它可以立即被執行

2. 無法再函式外再次被呼叫執行

3. 通常不用再給名稱了

接下來我們來看看立即函式常見用法

1. 限制變數的作用域

一般來說變數它的作用域在函式內,如下圖所示,變數Ming 它無法在式外被使用,它只能在立即函式內被取得,所以我們通常可以用這樣的方式去限制變數的作用域

2. 它也可以用來傳遞參數

雖說立即函式裡的變數無法在外層直接使用,但仍然可以用return的方式,把我們所想要的值傳送出去,然後再宣告一個變數去接這個值就可以了,如下圖所示,由於立即函式也是一個表達示,也就表示它也可以回傳值,寫法上只要在該立即函式尾巴的小刮號加入參數,然後return回我們要的值就可以了

3. 它可以用來傳遞物件裡的值

很多時候我們也會把立即函式裡的值傳遞到另個立即函式裡,此時我們可以透過物件傳參考的特性,讓立即函式也可以傳遞數值到另個立即函式裡,如下圖所示,我們用兩個立即函式來當範例,在最外層宣告一個空物件obj_a,然後將obj_a各帶入2個立即函式裡,

1. 當先執行第一個立即函式時,我們給定一個porperty person1並給予數值”小明1″

2. 由於物件有傳參考的特性,所以此時的obj_a = {person1:”小明1″},所以我們會把把obj_a裡的資料一同帶入到下個立即函式裡

3. 下個立即函式裡的obj_c裡的資料可以算是一個新的參考物件,但同時它帶有前一個立即函式帶進去的 {person1:”小明1″} , 所以obj_c = {person1:”小明1″}

4. 此時我們給obj_c加入一個新的property person2=”小明2″,因此這時的obj_c = {person1:”小明1″, person2:”小明2″}

5. 由於物件是傳參考的特性(因為它對應的是記憶體的位置),此時就算我們把person1這個property改成”小明2-1″ , 也不影響上一個立即函式裡obj_b的值, 因此
obj_b = {person1:”小明1″}
obj_c = {person1:”小明2-1″,person:”小明2″}

4. 它可以用來傳遞全域物件裡的值

它除了可以利用物件傳參考的特性來傳遞數值之外,傳遞全域物件裡的值也是滿常見的手法,它通是運用在一些大型框架上,如下圖所示

1. 在第一個立即函式裡直接帶入window這個全域的物件,並給定一個porperty {person:”小明”}

2. 此時不論是在前一個立即函式或是下一個立即函式都可以直接使用window這個全域物件裡{person:小明}這個proerty

3. 這種用立即函式來傳遞全域物件的方式,通常也被運用在大型框架的函式庫的掛載上,如下圖所示