Javascript中的變數範圍

來源:互聯網
上載者:User

以下內容是我看《Javascript核心》這本書學到的。

1,Javascript變數範圍為(整個)函數體內有效,沒有塊範圍。

2,Javascript的函數是在局部範圍內啟動並執行,在局部範圍啟動並執行函數體可以訪問其外層的變數和函數。

3,Javascript的範圍為詞法範圍。詞法範圍是指:其範圍在定義時(詞法分析時)就確定下來的,而並非在執行時確定。

 

作者有一個極好的例子:

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

 

你也許會認為這斷程式的運行結果是:

globallocal

那你就錯了,真正的結果是:

undefinedlocal

 

因為在函數scopeTest的定義中,預先訪問了未申明的變數str,然後才是對str的初始化,所以第一個str會返回undefined錯誤。

那為什麼函數這個時候不去訪問外部的str變數呢?這是因為,在詞法分析結束後,構造範圍鏈的時候,會將函數內定義的var變數放入該鏈,因此str在整個函數scopeTest內都是可見的(從函數的第一行到最後一行),由於str變數本身是未定義的,程式順序執行,到第一行就會返回未定義。第二行將str賦值,所以第三行str將返回local。

 

換種說法上面的代碼也等價於:

var str = "global";function scopeTest() {    var str;     alert(str);    str = "local";    alert(str);}scopeTest();
相關文章

聯繫我們

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