AC-A20: 「自學經驗」回顧

yu
Nov 18, 2021

--

在學習2-3 Wee4教案時看到一段程式碼,其中使用了IIFE的概念(如圖)

教案中也沒有對這段立即函式有太多的說明,畢竟這次教案主要是要學習SCSS的用法

我比較困惑的問題點是:
Q1. 影片中是的CodeingStyle是有用分號做結尾的,所以在function前面並不需要加分號 但教材中的文字說明是採用JavaScript Standard Style,所以就像圖片一樣,function前面有加分號做區隔?why?
Q2. 為什麼這邊要用立即函式?而不是用一般的函式就好了呢?

遇到問題的當下我有試著去找答案,但還是有看沒有懂..決定先完成這份教案,這個問題先收在我的QA筆記裡!

完成教案的幾天後,我回過頭來好好的研究IIFE到底是什麼..以往都是直接Google 關鍵字,尋找前輩整理好的心得,這次我想訓練自己閱讀英文文件的能力,直接從MDN下手💪

MDN上關於IIFE的說明

從上圖文字說明我可以理解到:
IIFE是個立刻執行的函式,他是用雙括弧將function包住,這麼做的優點是將全域變數區域化,避免與域變數汙染,而在程式碼最後加上雙括弧是讓他能夠立即執行

MDN上關於IIFE的說明2

什麼時候需要用到IIFE?如文件所說,一個專案中可能有很多個全域變數,為了減少全域變數被汙染的可能性,不會重複使用的函式就可以改使用IIFE

文件讀到這,好像問題已經解決得差不多了?一方面是想逃避閱讀英文,一方面是感動自己好像讀的懂文件了😂

關於Q1我決定直接開replit實測看看,為什麼不是開vscode呢?因為vscode的自動輸入套件太方便,總覺得太依賴自動模式對新手的我來說不是好事

錯誤代碼

一片紅,別緊張..錯誤代碼:TypeError: 100 is not a function
hmm..那這樣是不是他認為100和後面的IIFE是一組的呢?如果試著將(function)..前面新增個分號當分隔呢?

coding style-A

OK!輸出結果符合預期,看來是coding style造成程式誤判?

再試試看另一個寫法

coding style-B

關於文件中一直提到的全域變數汙染也測試看看

試著從外面呼叫變數b

嗯,就如文件所說,從外面是呼叫不到IIFE裡的變數的

看起來IIFE的概念好像真的很方便,計畫在下次專案實際運用這概念製作專案!

--

--

yu

設計本科背景,前3D Lighting Artist,現為Web前端工程師。