版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2017年的事情還是2017年完成吧。話不多說,現(xiàn)在開始:之前翻譯過兩篇發(fā)表在Medium上的兩篇文章,關(guān)于變量和函數(shù)提升的問題。后來發(fā)現(xiàn),一個讀者(GavinOrland)與作者(BhuvanMalik)就函數(shù)和變量提升的問題產(chǎn)生了分歧,是留言形式的。最后作者還專門又寫了一篇文章來回應(yīng)問題,我想也是想讓大家都看見吧。所以我自己整理一下,現(xiàn)將他們的討論也做一個搬運吧。GavinOrland與BhuvanMalik就提升話題中“問題1”和“問題3”的討論GavinOrland:Explanations1and3areslightlyincorrectasfunctiondeclarationsareactuallyhoistedabovevariabledeclarations.解釋1和3有點不正確,實際上函數(shù)聲明實際上是在變量聲明之上提升的。BhuvanMalik:Forthefirstquestion'sbehindthescenes,Ihavepurposelyshowntheeffectsofhoistingonlyinsidethefunctionalscopeofb().對于第一個問題,我刻意僅在b()的功能范圍內(nèi)展示了提升的效果。Asforthethirdquestion,varhoisted='Tmavariable";comesfirstandthereforethevariable"hoisted"shouldbehoistedfirstwithan"undefined"value.Icouldbewronginwhichcaseyoucanpointmetoasourcewhichprovesmewrong,inwhichcaseI'dbehappymakethechange.?第三個問題:varhoisted=Tmavariable”’;因此首先應(yīng)該提升“提升”的變量,并且具有"undefined〃的值。我可能是錯的,在這種情況下,你可以指出我的來源,證明我錯了,在這種情況下,我會很高興做出改變。?GavinOrland:Here'swhatgoesonbehindthescenesforexplanation3:functionpareiatO{//FunctiondeclarationhoistedfirstfuMtiotakoi^ted(){returnafunctioia";}//Variablere-assigMd(declarationigMred)koistcd= avanable11;returnkoisted();}console,Iog(parentO);Here'sasourceforthis.源碼在這里。BhuvanMalik:Whatyou'retryingtosayiscorrect.However,sayingthatfunctiondeclarationsgethoisted"above"variabledeclarations,whichimpliesthatvariabledeclarations"gethoistedbelow"iswrong.Insuchacase,whatishappeningisthatthehoistingofvardeclarationssimplygetsignored.Iwillupdatethis.?你想證明你說的是對的。然而說函數(shù)聲明提升在變量聲明提升之上,在暗示變量聲明"提升在下面"是錯的。在這樣的情況下,發(fā)生的事情就是簡單地忽略var聲明的提升。我會更新這個。?GavinOrland:I'mnot"trying"tosayanything,I'msimplysayingit:functiondeclarationsarehoistedabovevariabledeclarations.Whatisunclearaboutthat?Yes,thereforevariabledeclarationsarethenlogicallyhoistedbelowfunctiondeclarations,ifyouwanttothinkaboutitlikethat.Itisnotwrongtosaythat—pleaseprovetomethatiswrong.我沒有試著說什么,我只是在說:函數(shù)聲明被提升到了變量聲明之上。有什么不清楚的呢?是的,因此變量聲明在函數(shù)聲明下面邏輯地提升,如果你覺得他是這樣,那樣說也沒錯--請向我證明我是錯的。Inyourfirstreplyyousaid:在你第一次回復(fù)中你說:varhoisted="I'mavariable',;comesfirstandthereforethevariable"hoisted"shouldbehoistedfirstwithan“undefined”valueThisisincorrect—adeclarationwillbehoistedafterthefunctionwiththisvalue.Thenthestringvalueisimmediatelyassignedtoit.這是錯的一一個聲明將在具有這個值的函數(shù)之后被提升。然后,字符串值立即分配給它。Indeed,inthecaseofexample3,thedeclarationisignored(incontradictiontoyourexplanation),asIexplained,becausethevariablehasalreadybeendeclaredintheformofthefunction,butinothercases(suchasexample1,whichyoudonotwanttocorrect)functiondeclarationsarehoistedfirst,thenvariabledeclarations.確實,在案例3的情況中,這個聲明被忽略(與你的解釋相矛盾),正如我所解釋的,因為變量已經(jīng)以函數(shù)的形式被聲明了,但在其他情況(如示例L您不想糾正)函數(shù)聲明首先被提升,然后是變量聲明。Functionandvariabledeclarationsarealwayshoistedinthismanner,theassignmenttothevariablewilltakeplacewhereveritappearsinthecode.函數(shù)和變量聲明總是用這樣的方式被提升,變量的賦值將在代碼中的任何位置出現(xiàn)。It'soddyoushouldacceptmycorrectionandthensomehowclaimyouarerightandIamwrong?!Anyway,Iseeyouhavenowcorrectedthearticle(otherwiseverygood,andthanksforwritingit).這很奇怪,你應(yīng)該接受我的更正,然后以某種方式聲稱你是對的,我錯了?無論如何,我看你現(xiàn)在己經(jīng)糾正了這篇文章(其他的非常好,謝謝你寫了這些)。BhuvanMalik:Firstofall,thanksforcorrectingmesirandIappreciateyourexplanations.Yousaythatvariabledeclarationwillgethoistedafterthefunctionwithan“undefined"value,andthenthestringvaluewillbeimmediatelyassigned.Mydoubthereisthatwhatifweonlyhavethevariabledeclarationwithoutastringvaluebeingassignedlikeso:首先,感謝先生糾正我,我感謝你的解釋。你說那個變量聲明在函數(shù)之后被賦值-undefined",然后字符串值將立即分配。這里我的疑問是,如果我們只有變量聲明沒有被賦值的字符串值,如下所示:functionparentQ(varhoisted;return叩鵬afunctioi^H;]returnhoisted。;}console.Iog(parent());Ifvariabledeclarationdoesgethoistedafterthefunction,thenbehindthescenesforthisaccordingtoyourexplanationshouldbe:如果變量聲明在函數(shù)之后被掛起,那么根據(jù)你的解釋,這個后臺應(yīng)該是:functionparent。{//Hoistedfirstfunctionhoisted(){return"I'mafunction.";)//Hoistedsecondwithavalueofundefinedvarhoisted;returnhoisted。;}console.Iog(paretf\t());Ifthevariabledeclarationisindeedhoistedsecond,thenhoistedshouldfinallygetthevalueof“undefined"afterthehoistingofthefunctionandtheprogramshouldfinallythrowanerrorbecausehoistedisnolongerafunction.如果變量聲明確實是第二次提升的話,那么在提升函數(shù)后最終得到的值是"undefined",程序最終會因為提升函數(shù)而拋出一個錯誤。However,theoutputstillcomesouttobe"I'mafunction".然而,這里輸出的是"I'mafunction"ThisisthereasonwhyIthinkthereisnovariabledeclarationhoistinghappeninghere.Iagreethatavariabledeclarationhoistinginsuchacasesimplygetsignored.Gettingme?Again,Icouldbewrong.I'mjusttryingtolearnherebydiscussingwithyou.就是這個原因我認(rèn)為變量聲明沒有提升。我同意,在這種情況下提交的變量聲明只是被忽略。再聯(lián)系我?再次,我可能是錯的。我只是想通過討論和你一起來學(xué)習(xí)。GavinOrland:Noproblem,Icanexplainthis.InfactIthinkwehavealreadycoveredit,really.沒問題,我能解釋這個。事實上我認(rèn)為我們已經(jīng)把它覆蓋了,真的。Variabledeclarationsarehoistedafter(orbelow)functiondeclarations.But,inthecasewherethenamesmatchfunctiondeclarations(oranyvariablealreadydeclared),theyhavenoeffect,soareignored.變量聲明在函數(shù)聲明之后(或者下面)被提升。但是,在名稱匹配函數(shù)聲明的情況下(或任何已經(jīng)聲明的變量),它們沒有效果,因此被忽略了。So,redeclaringavariabledoesnotrenderitundefined,ithasnoef
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年海南省安全員A證考試題庫及答案
- 【小學(xué)課件】體積單位的換算
- 《藥品管理制度》課件
- 《電氣設(shè)備故障診斷》課件
- 《紅樓夢》的英文簡介
- 單位人力資源管理制度呈現(xiàn)匯編十篇
- 單位管理制度展示匯編職工管理篇十篇
- 單位管理制度展示大全人員管理篇十篇
- 智慧農(nóng)貿(mào)冷鏈物流基地項目可行性研究報告模板立項審批
- 單位管理制度收錄大合集職員管理十篇
- 金屬的拉伸實驗(實驗報告)
- 鍋爐定期檢驗
- 普通話課件(完整版)
- 品管圈QCC質(zhì)量持續(xù)改進案例胃腸外科-落實胃腸腫瘤患者術(shù)后早期下床活動PDCA
- 人員密集場所安全風(fēng)險源辨識清單
- GB/T 39335-2020信息安全技術(shù)個人信息安全影響評估指南
- 比較文學(xué)概論馬工程課件 第6章
- GB/T 19631-2005玻璃纖維增強水泥輕質(zhì)多孔隔墻條板
- GB/T 11352-2009一般工程用鑄造碳鋼件
- 冠心病診斷與治療課件
- 新疆少數(shù)民族發(fā)展史課件
評論
0/150
提交評論