摘要:括號操作符中函數轉換引發的一次討論。,我認為規范與我的猜測即下圖我這里說的匿名函數就是當前匿名函數的意思是一致的。
Grouping operator(括號操作符)中函數轉換引發的一次討論。
起因是群里有朋友提出了這么一個問題:
于是大家展開了討論。看到這個題目我覺得很有意思,也許你會想到《你不知道的javascript》中那個經典的例子。查閱一些資料后(這一次查閱主要是找到了這篇文章:函數表達式與函數聲明,這篇文章中也給出了那個經典例子的解答。)。
我將找到的文章中與這題最緊密相關的一段話截圖發在了群中:
出現了下面的討論:
到這里,出來了問題的關鍵點,之前的重心放在為什么這個聲明在外部(無論之前還是之后)都引用不到,通過資料發現是因為把它解析成了一個匿名函數表達式。但是上面這位朋友提出的這個問題(既然是匿名的,為什么在函數內部可以拿到foo這個引用),引發了我進一步的思考。然后跑步去了- -,回來后繼續查閱,如下:
這里圖太小,補充說明下,我發的圖片是這張:(出自ES5的規范: 函數表達式規范)
我認為規范已經說的很明白了,即“在函數表達式中的函數名只能被函數內部引用到,出了內部這個作用域,其他任何地方都無法直接引用。”, 我認為規范與我的猜測(即下圖)
(PS:我這里說的匿名函數就是當前匿名函數的意思))
是一致的。我認為這兩者基本等價。
But, 那位朋友說:
PS:圖太小了,他發的圖片是這張:
上圖和下圖都包含了我的回復
PS: 這里我說的在內部定義,我想表達的意思準確來說是在內部的第一行定義,類似于JAVA在構造函數中調用父類構造函數只能在第一行,我的意思就是這種現象等價于他隱式在第一行定義了foo為當前匿名函數。
但是這位朋友非要說這有本質的區別(見下圖),我實在是沒辦法繼續說下去了。。(PS:無關內容(關于其他問題的討論)被我馬賽克掉了)
所以最后,希望大家發表自己的看法,無論有何種觀點,都歡迎和大家討論~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80534.html
摘要:深入系列第三篇,講解執行上下文棧的是如何執行的,也回答了第二篇中的略難的思考題。 JavaScript深入系列第三篇,講解執行上下文棧的是如何執行的,也回答了第二篇中的略難的思考題。 順序執行? 如果要問到 JavaScript 代碼執行順序的話,想必寫過 JavaScript 的開發者都會有個直觀的印象,那就是順序執行,畢竟: var foo = function () { ...
摘要:標識符有效性正是導致函數語句與函數表達式不同的關鍵所在下一小節我們將會展示命名函數表達式的具體行為。歸根結底,只有給函數表達式取個名字,才是最穩妥的辦法,也就是使用命名函數表達式。 前言 網上還沒用發現有人對命名函數表達式進去重復深入的討論,正因為如此,網上出現了各種各樣的誤解,本文將從原理和實踐兩個方面來探討JavaScript關于命名函數表達式的優缺點。簡單的說,命名函數表達式只有...
摘要:本文將會討論中的內存泄漏以及如何處理,方便大家在使用編碼時,更好的應對內存泄漏帶來的問題。當內存不再需要時進行釋放大部分內存泄漏問題都是在這個階段產生的,這個階段最難的問題就是確定何時不再需要已分配的內存。中的相同對象稱為全局。 隨著現在的編程語言功能越來越成熟、復雜,內存管理也容易被大家忽略。本文將會討論JavaScript中的內存泄漏以及如何處理,方便大家在使用JavaScript...
摘要:回調傳遞函數是將函數當做值并作為參數傳遞給函數。這個例子中就是因為事件綁定機制中的傳入了回調函數,產生了閉包,引用著所在的作用域,所以此處的數據無法從內存中釋放。 javascript作用域 一門語言需要一套設計良好的規則來存儲變量,并且之后可以方便的找到這些變量,這逃規則被稱為作用域。 這也意味著當我們訪問一個變量的時候,決定這個變量能否訪問到的依據就是這個作用域。 一、詞法作用域 ...
閱讀 3551·2021-10-09 09:43
閱讀 6149·2021-09-07 10:15
閱讀 2746·2019-08-30 14:03
閱讀 3074·2019-08-29 11:01
閱讀 1715·2019-08-29 10:56
閱讀 1074·2019-08-28 17:52
閱讀 3502·2019-08-26 11:42
閱讀 2547·2019-08-26 10:33