from : javascript + function () {}(); 解析
(function () {
console.log('gordon');
})();
// gordon
上面這段 code,宣告完就自己呼叫自己。 這種方式稱作「Iffy」(IIFE - immediately invoked function expression) 是一個匿名函式表達式,而且可以立即被調用。
一個匿名 function 這樣定義:
function () {
console.log('hihi');
};
一般要執行一個有名稱的 function,
直接在 function 名稱後加上置入參數的 "(
)
",ex:
// 定義
var sayHi = function () {
console.log('hihi');
}
// 執行
sayHi()
// hihi
但執行匿名 function,直接加上 "(
)
" 會壞掉!
// 這樣
function (){
console.log("hihi")
}
// 或這樣
function (){
console.log("hihi")
}()
// "error"
// "SyntaxError: Unexpected token (...
說明:
javascript 直譯器 (or v8 engine) 在沒有任何符號的情況下讀到 function
這個關鍵字,
會先認為是 declaration (宣告),後面又讀到 ()
會無法辨認。
因此在 function
前面放上 (
, +
, -
, !
, ~
,
會讓 javascript 引擎知道後面是 statement (聲明,即表達式或一些非表達式的陳述語句)
// 用 "()" 把 function 表達式包住
(function (){
console.log("bbb")
})()
// bbb
// 或連代表直接呼叫的 "()" 也一起包住
(function (){
console.log("bbb")
}())
// bbb
// 放 "+" 在 function 前面
+function (){
console.log("bbb")
}()
// bbb