javascript 範圍鏈產生順序

來源:互聯網
上載者:User

  最近看到的,理清一些思路。

  javascript範圍鏈有時候會導致一些奇怪的問題,作為弱類型的javascript,函數也是對象,變數的範圍是函數體內有效,無塊範圍。

  javascript在尋找變數或對象時,先從函數體內部內容尋找,其次尋找函數的外部內容。

  而javascript在構建範圍時,是詞法範圍,並非執行時。參考abruzzi的例子:

var str = "global";function scopeTest(){  print(str);  var str = "local";  print(str);}scopeTest();

結果為:

undefined
local

解析器並沒有調用javascript外部的str,在文法分析後,構造範圍,此時scopeTest()函數中的str在整個函數中初始化,並沒有賦值,所以第一句執行print輸出undefined

進行小修改,將scopeTest中的str定義為全域變數,所得結果就容易理解了。

var str = "global";
function scopeTest(){
  print(str);
  str = "local";//str為全域變數。
  print(str);
}
scopeTest();

此時結果是

global
local
其實,就是全域變數和局部變數的範圍的作用關係,javascript無塊範圍,影響了局部變數的作用範圍,從而導致一些特別的情況。
不知道理解是否合理,請各位指教。
很多不合理的地方,這邊的解析感覺更合理點我,12樓的回複
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.