原由是羣裏有朋友提出了這麼一個問題:javascript
因而你們展開了討論。看到這個題目我以爲頗有意思,也許你會想到《你不知道的javascript》中那個經典的例子。查閱一些資料後(這一次查閱主要是找到了這篇文章:函數表達式與函數聲明,這篇文章中也給出了那個經典例子的解答。)。html
我將找到的文章中與這題最緊密相關的一段話截圖發在了羣中:java
出現了下面的討論:git
到這裏,出來了問題的關鍵點,以前的重心放在爲何這個聲明在外部(不管以前仍是以後)都引用不到,經過資料發現是由於把它解析成了一個匿名函數表達式。可是上面這位朋友提出的這個問題(既然是匿名的,爲何在函數內部能夠拿到foo這個引用),引起了我進一步的思考。而後跑步去了- -,回來後繼續查閱,以下:github
這裏圖過小,補充說明下,我發的圖片是這張:(出自ES5的規範: 函數表達式規範)函數
我認爲規範已經說的很明白了,即「在函數表達式中的函數名只能被函數內部引用到,出了內部這個做用域,其餘任何地方都沒法直接引用。」, 我認爲規範與個人猜想(即下圖)spa
(PS:我這裏說的匿名函數就是當前匿名函數的意思))htm
是一致的。我認爲這二者基本等價。圖片
But, 那位朋友說:ip
PS:圖過小了,他發的圖片是這張:
上圖和下圖都包含了個人回覆
PS: 這裏我說的在內部定義,我想表達的意思準確來講是在內部的第一行定義,相似於JAVA在構造函數中調用父類構造函數只能在第一行,個人意思就是這種現象等價於他隱式在第一行定義了foo爲當前匿名函數。
可是這位朋友非要說這有本質的區別(見下圖),我實在是沒辦法繼續說下去了。。(PS:無關內容(關於其餘問題的討論)被我馬賽克掉了)
因此最後,但願你們發表本身的見解,不管有何種觀點,都歡迎和你們討論~