# 匿名函式 與 立即函式 > 編輯 :Jung [參考來源](https://sweeteason.pixnet.net/blog/post/40371736-javascript-%E9%96%8B%E7%99%BC%E5%AD%B8%E7%BF%92%E5%BF%83%E5%BE%97---%E5%87%BD%E6%95%B8%E7%9A%84%E5%A4%9A%E7%A8%AE%E5%AF%AB%E6%B3%95%E8%88%87%E6%87%89) ## 函數宣告的三種寫法 ```javascript= //函數宣告式 function add(a,b) { return a + b; } // 匿名函式 var addfun = function (a,b) { return a + b; } // 具名函數 var addfun = function add(a,b) { return a + b; } ``` :::info 在 javascript 中不論函數本身在哪裡,都會被提升到最頂端 ::: ```javascript= //正確的呼叫 msg(); function msg() { alert('ok'); } //失敗的呼叫 1. msg(); var msg = function msgfun() { alert('ok'); } //失敗的呼叫 2. msg(); var msg = function() { alert('ok'); } ``` :::info 具名 + 匿名函數也是會被提升到最頂端,只是被提升的是變數宣告 (沒有函數的定義) ::: ```javascript= //立即函式 (function () { //函式內容 })(); ``` >如果你曾經看過人家寫好的 jQuery Plugin ,就或多或少會看到以上這種寫法。以一般寫 jQuery Plugin 為例 (當然不見得一定要這樣寫),因為 jQuery 是以 $ 符號來使用,但 $ 可能會被頁面其他 js 定義所覆蓋。 >ex : prototype 這個 js framework也有用到 $。 >所以可以利用立即函式來保護並執行,然後傳入 jQuery 物件到函數中使用 ```javascript= //需傳入一個參數 (function($) { $.fn.jplugin = function(){ //plugin 內容 } })(jQuery); //傳入jQuery並執行 ``` >立即函式的構成是一個匿名 or 具名函數,外面包著一個小括號來保護 ```javascript= //空函數 (function(){ }) ``` >最後在函式最後加上一組括號代表立即執行,於是就變成這樣。 ```javascript= (function(){ })(); // 也可以寫成這樣 (function(){ }()); ``` :::info 立即函式的優點是可以幫助你把一堆運算包起來,又不用擔心會留下全域變數 **變數生命週期只存在於函數內** 立即函式還有一種用法,你可以把它存在瀏覽器的書籤列裡面,點下去就會立即執行 ::: #### 立即函式十分好用,他也可以當作物件屬性的值 ```javascript= var res = { msg : (function(){ return "test"; })() } res.msg; // "test"; ``` :::success 此時的 msg 回傳的已是數值不是 function 了 ::: ###### tags: `JavaScript` `匿名函式` `立即函式` `立即函式`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up