http://www.2ality.com/2012/09/expressions-vs-statements.html
http://www.jb51.net/article/31298.htm
表達式 語句
表達式語句 如 {a:'a'} function () {}
為了沖突 表達式上下文 不允許 { function 開頭
eval(“{a:'a'}”) 解析時 為 語句上下文 可用"({a:'a'})" 變為表達式上下文
function () { return "abc" }()
SyntaxError: function statement requires a name 你會得到一個語法錯誤(函數聲明不可以是匿名的):
function foo() { return "abc" }()
function foo() { return "abc" }() 還會得到一個語法錯誤(函數聲明不能被理解執行):
() 作用與表達式上下文解析 但 不允許以function開頭
故可以用 添加一元運算符解決
+function () {return :'a'}()
-function () {return :'a'}()
!function () {return :'a'}()
