成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從(function foo(){})分析JS內(nèi)部究竟如何處理括號(hào)操作符

chanthuang / 3016人閱讀

摘要:括號(hào)操作符中函數(shù)轉(zhuǎn)換引發(fā)的一次討論。,我認(rèn)為規(guī)范與我的猜測(cè)即下圖我這里說的匿名函數(shù)就是當(dāng)前匿名函數(shù)的意思是一致的。

Grouping operator(括號(hào)操作符)中函數(shù)轉(zhuǎn)換引發(fā)的一次討論。

起因是群里有朋友提出了這么一個(gè)問題:

于是大家展開了討論。看到這個(gè)題目我覺得很有意思,也許你會(huì)想到《你不知道的javascript》中那個(gè)經(jīng)典的例子。查閱一些資料后(這一次查閱主要是找到了這篇文章:函數(shù)表達(dá)式與函數(shù)聲明,這篇文章中也給出了那個(gè)經(jīng)典例子的解答。)。

我將找到的文章中與這題最緊密相關(guān)的一段話截圖發(fā)在了群中:

出現(xiàn)了下面的討論:

到這里,出來了問題的關(guān)鍵點(diǎn),之前的重心放在為什么這個(gè)聲明在外部(無論之前還是之后)都引用不到,通過資料發(fā)現(xiàn)是因?yàn)榘阉馕龀闪艘粋€(gè)匿名函數(shù)表達(dá)式。但是上面這位朋友提出的這個(gè)問題(既然是匿名的,為什么在函數(shù)內(nèi)部可以拿到foo這個(gè)引用),引發(fā)了我進(jìn)一步的思考。然后跑步去了- -,回來后繼續(xù)查閱,如下:

這里圖太小,補(bǔ)充說明下,我發(fā)的圖片是這張:(出自ES5的規(guī)范: 函數(shù)表達(dá)式規(guī)范)

我認(rèn)為規(guī)范已經(jīng)說的很明白了,即“在函數(shù)表達(dá)式中的函數(shù)名只能被函數(shù)內(nèi)部引用到,出了內(nèi)部這個(gè)作用域,其他任何地方都無法直接引用。”, 我認(rèn)為規(guī)范與我的猜測(cè)(即下圖)

(PS:我這里說的匿名函數(shù)就是當(dāng)前匿名函數(shù)的意思))

是一致的。我認(rèn)為這兩者基本等價(jià)。

But, 那位朋友說:

PS:圖太小了,他發(fā)的圖片是這張:

上圖和下圖都包含了我的回復(fù)

PS: 這里我說的在內(nèi)部定義,我想表達(dá)的意思準(zhǔn)確來說是在內(nèi)部的第一行定義,類似于JAVA在構(gòu)造函數(shù)中調(diào)用父類構(gòu)造函數(shù)只能在第一行,我的意思就是這種現(xiàn)象等價(jià)于他隱式在第一行定義了foo為當(dāng)前匿名函數(shù)。

但是這位朋友非要說這有本質(zhì)的區(qū)別(見下圖),我實(shí)在是沒辦法繼續(xù)說下去了。。(PS:無關(guān)內(nèi)容(關(guān)于其他問題的討論)被我馬賽克掉了)

所以最后,希望大家發(fā)表自己的看法,無論有何種觀點(diǎn),都?xì)g迎和大家討論~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80534.html

相關(guān)文章

  • Functions

    摘要:如果我們把這樣的定義放在全局代碼中,解析器會(huì)把函數(shù)當(dāng)作聲明,因?yàn)樗躁P(guān)鍵字開頭,在第一種情況中,我們會(huì)得到,因?yàn)槲覀內(nèi)鄙俸瘮?shù)名。 原文 ECMA-262-3 in detail. Chapter 5. Functions. 簡(jiǎn)介 在這篇文章中,我們將討論一個(gè)ESCMAScript對(duì)象,函數(shù)。我們將討論不同類型的函數(shù),每個(gè)類型是如何影響環(huán)境中的變量對(duì)象(variables object)...

    sydMobile 評(píng)論0 收藏0
  • JavaScript深入之執(zhí)行上下文棧

    摘要:深入系列第三篇,講解執(zhí)行上下文棧的是如何執(zhí)行的,也回答了第二篇中的略難的思考題。 JavaScript深入系列第三篇,講解執(zhí)行上下文棧的是如何執(zhí)行的,也回答了第二篇中的略難的思考題。 順序執(zhí)行? 如果要問到 JavaScript 代碼執(zhí)行順序的話,想必寫過 JavaScript 的開發(fā)者都會(huì)有個(gè)直觀的印象,那就是順序執(zhí)行,畢竟: var foo = function () { ...

    codecraft 評(píng)論0 收藏0
  • 深入解JavaScript系列2:揭秘命名函數(shù)表達(dá)式

    摘要:標(biāo)識(shí)符有效性正是導(dǎo)致函數(shù)語句與函數(shù)表達(dá)式不同的關(guān)鍵所在下一小節(jié)我們將會(huì)展示命名函數(shù)表達(dá)式的具體行為。歸根結(jié)底,只有給函數(shù)表達(dá)式取個(gè)名字,才是最穩(wěn)妥的辦法,也就是使用命名函數(shù)表達(dá)式。 前言 網(wǎng)上還沒用發(fā)現(xiàn)有人對(duì)命名函數(shù)表達(dá)式進(jìn)去重復(fù)深入的討論,正因?yàn)槿绱?,網(wǎng)上出現(xiàn)了各種各樣的誤解,本文將從原理和實(shí)踐兩個(gè)方面來探討JavaScript關(guān)于命名函數(shù)表達(dá)式的優(yōu)缺點(diǎn)。簡(jiǎn)單的說,命名函數(shù)表達(dá)式只有...

    chenjiang3 評(píng)論0 收藏0
  • JavaScript中的內(nèi)存泄漏以及何處

    摘要:本文將會(huì)討論中的內(nèi)存泄漏以及如何處理,方便大家在使用編碼時(shí),更好的應(yīng)對(duì)內(nèi)存泄漏帶來的問題。當(dāng)內(nèi)存不再需要時(shí)進(jìn)行釋放大部分內(nèi)存泄漏問題都是在這個(gè)階段產(chǎn)生的,這個(gè)階段最難的問題就是確定何時(shí)不再需要已分配的內(nèi)存。中的相同對(duì)象稱為全局。 隨著現(xiàn)在的編程語言功能越來越成熟、復(fù)雜,內(nèi)存管理也容易被大家忽略。本文將會(huì)討論JavaScript中的內(nèi)存泄漏以及如何處理,方便大家在使用JavaScript...

    itvincent 評(píng)論0 收藏0
  • You Don't Know Js 閱讀筆記

    摘要:回調(diào)傳遞函數(shù)是將函數(shù)當(dāng)做值并作為參數(shù)傳遞給函數(shù)。這個(gè)例子中就是因?yàn)槭录壎C(jī)制中的傳入了回調(diào)函數(shù),產(chǎn)生了閉包,引用著所在的作用域,所以此處的數(shù)據(jù)無法從內(nèi)存中釋放。 javascript作用域 一門語言需要一套設(shè)計(jì)良好的規(guī)則來存儲(chǔ)變量,并且之后可以方便的找到這些變量,這逃規(guī)則被稱為作用域。 這也意味著當(dāng)我們?cè)L問一個(gè)變量的時(shí)候,決定這個(gè)變量能否訪問到的依據(jù)就是這個(gè)作用域。 一、詞法作用域 ...

    wanglu1209 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<