犀牛書第4章 變數(下篇):深入理解JavaScript中的變數範圍

來源:互聯網
上載者:User

既然我們知道全域變數是全域對象的屬性,而局部變數是一個特殊的調用對象的屬性,那麼我們就可以再次關注一下變數範圍的標記法,對它進行再定義。有關範圍的新描述給理解多環境下的變數提供了一種有用的方法,它為JavaScript的工作過程提供了一種強大的新理解。

每個JavaScript執行環境都有一個和它關聯在一起的範圍鏈。這個範圍鏈是一個對象列表或對象鏈。當JavaScript代碼需要查詢變數x的值時(一個稱為變數名解析的過程),它就開始查看該鏈的第一個對象,如果那個對象有一個名為x的屬性,那麼就採用那個屬性的值。如果第一個對象沒有名為x的屬性,JavaScript就會繼續查詢鏈中的第二個對象。如果第二個對象仍然沒有名為x的屬性,那麼就繼續查詢下一個對象,以此類推。

在JavaScript頂層代碼中(例如不屬於任何函數定義的代碼),範圍鏈只由一個對象構成,那就是全域對象。所有的變數都是在這一對象中查詢的。如果一個變數並不存在,那麼這個變數的值就是未定義的。在一個非嵌套的函數中,範圍鏈是由兩個對象構成的,第一個是函數的調用對象,第二個就是全域對象。當函數引用一個變數時,首先檢查的是調用對象(局部範圍),其次才檢查全域對象(全域範圍)。在一個嵌套函數的範圍鏈中可以有三個或更多的對象。

相關文章

聯繫我們

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