JavaScript變量做用域

  • JavaScript的變量做用域是基於其特有的做用域鏈
  • JavaScript沒有塊級做用域
  • 函數中聲明的變量在整個函數中都有定義

1.JavaScript的做用域鏈

var rain = 1; function rainman(){ var man = 2; funciton inner(){ var innerVar = 4; alert(rain); } inner(); } rainman();

在alert(rain);這句代碼,JavaScript首先在inner函數中檢查,不然則在rainman中查找,這段代碼在rainmain()中沒有定義,則最終查找的是全局變量中的rain。函數

做用域鏈:JavaScript須要查找一個變量時,首先查找做用域鏈第一個對象,若是第一個對象沒有定義,則順序向後查找。spa

2.函數體內部,局部變量的優先級比同名的全局變量高

var rain = 1; function check(){ var rain = 100; alert(rain); } check(); //100  alert(rain); //1

3.JavaScript沒有快級做用域

function rainmain(){ //rainman 函數體內存在三個局部變量 i j k  var i = 0; if(1){ var j = 0; for(var k=0;k<3;k++) alert(k); //0,1,2 alert(k); // 3 } alert(j); //0 }

i,j,k的做用域是相同的,他們在rainmain中是全局的code

4.函數中聲明的變量在整個函數中都有定義

function rain(){ var x = 1; function man(){ x = 100; } man(); //調用man alert(x); //這裏會彈出100 } rain(); //調用rain

上面代碼說明,變量x在整個rain體內均可以使用,並能夠從新幅值。可是會有如下狀況產生:對象

var x = 1; function rain(){ alert(x); //undefined var x = '3'; alert(x); //3 }

是因爲rain定義了x,它會隱藏同名全局變量x。因爲alert時還未定義,因此undefinedip

5.未使用var關鍵字定義的變量都是全局變量

function rain(){ x = 100; } rain(); alert(x); //100

6.全局變量都是window對象的屬性

var x = 100; alert(window.x); //100
相關文章
相關標籤/搜索