js學習--變數範圍

來源:互聯網
上載者:User

標籤:add   ott   global   全域變數   範圍鏈   define   覆蓋   function   size   

作為一名菜鳥的我,每天學點的感覺還是不錯的。今天學習閉包的過程中看到範圍與範圍鏈這兩個概念,我覺得作為一名有追求的小白,有必要詳細瞭解下。

變數的範圍

就js變數而言,有全域變數和局部變數。這裡我覺得這個按字面意思理解就行了.......下面舉個例子

var message = "今天我做的糯米蒸排骨"; //定義一個全域變數function doL(){  var ss = "俠客行很好看";      //定義一個局部變數  alert(message);             //輸出"今天我做的糯米蒸排骨",在函數中可以引用到全域變數  function alertDo(){    alert(ss);  }  alertDo();             //輸出"俠客行很好看",這就涉及變數的範圍了};doL();alertDo();              //沒法輸出  alertDo is not definedalert(message);         //可以輸出"今天我做的糯米蒸排骨"

 這邊有2個很有意思的地方

1.當變數不用var聲明的時候我們實際上聲明了一個全域變數,好吧,這是錯誤的,看下面,num是一個全域變數,

而 mum = 1;

事實上是對屬性賦值操作。首先,它會嘗試在當前範圍鏈(如在方法中聲明,則當前範圍鏈代表全域範圍和方法局部範圍etc。。。)中解析 mum ; 如果在任何當前範圍鏈中找到mum ,則會執行對mum 屬性賦值; 如果沒有找到mum ,它才會在全域對象(即當前範圍鏈的最頂層對象,如window對象)中創造mum 屬性並賦值。

注意!它並不是聲明了一個全域變數,而是建立了一個全域對象的屬性。由於變數聲明內建不可刪除屬性,比較var num = 1 跟 num = 1,前者是變數聲明,帶不可刪除屬性,因此無法被刪除;後者為全域變數的一個屬性,因此可以從全域變數中刪除。

var num =1;mum = 1;

2.變數聲明會提前到函數頂部,其實之前已經遇到過了

    var scope="global";      function t(){          console.log(scope);          var scope="local"          console.log(scope);      }      t();  

 

它首先會輸出undefined,然後才是scope,它會將變數提前聲明並且覆蓋局部變數,等價於下面這種情況

    var scope="global";      function t(){          var scope;        console.log(scope);          scope="local"          console.log(scope);      }      t();  

 

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.