JS---函數名和變數名重名

來源:互聯網
上載者:User

標籤:作用   順序   alt   先行編譯   變數   習慣   .com   階段   編譯   

繼續範圍的問題,今天上午看了一會,下午看又看到了一個類型的題,函數名和變數名相同的問題。之前還不會覺得函數名和變數名重名了會有什麼衝突。也是沒有去測試過。。懶了。直接貼代碼:

運行之後大家猜測結果是多少?一口氣:100!!我果然是好大的口氣,沒有思考直接給出答案,實在是不太好的習慣。

出乎意料的報錯了,有點一頭霧水的感覺。但是一步一步的去分析的話,還是可以明白為什麼會是這個答案。

首先這道題需要和JS的先行編譯階段掛鈎了,也就是在執行代碼之前,需要準備的上下文環境;在先行編譯階段要準備需要使用到的變數、函數等資源。

變數和Variant 運算式在先行編譯階段得到的是聲明,而沒有賦值,得到undefined;

聲明式函數在先行編譯階段得到的是賦值,沒錯,就是直接賦值。

並且準備資源的順序是有先後的,先先行編譯  函數>  參數 > 變數;

那麼這道題可以解析為:

這個時候就可以很好的理解為什麼 a() 這個結果是報錯說a不是一個function了,人家本來就已經不是function了,已經重新定義賦值為實值型別了,當然要報錯咯。

JS---函數名和變數名重名

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.