js 變量


  • 變量的聲明

    1.使用var多次聲明同一個變量,是合法的,不會因此語法的錯誤;重復的聲明並初始化變量值,只是相當於普通的賦值語句。

    2.讀取一個未聲明的變量值,js會產生一個錯誤。

    3.嘗試給一個未經var 聲明的變量賦值,js會隱式聲明該變量,隱式聲明的變量被創建為全局變量。

    4.無論是全局變量還是局部變量,最好都使用var進行聲明。

          var i = 12;
var i = 13; //相當於賦值語句 i = 13
alert(i);
k = 34; //隱式聲明為一個全局變量
alert(k);
alert(j); //產生一個錯誤
  • 變量的作用域

  全局(global)變量的作用域是全局的,即在js代碼中處處有定義。

  局部(local)變量的作用域是局部性的,只在特定的范圍內,比如函數內部定義的變量,函數的參數變量,這些變量的作用范圍是局限在函數的內部的。

  1.聲明全局變量可以不適用var 關鍵字,局部變量則必須使用var關鍵字來聲明,為了避免不必要的麻煩,養成所有的變量都使用var關鍵字來聲明。

  2.變量的定義沒有塊級作用域

    在函數中聲明的所有的變量,無論是在哪里聲明的(只要是在函數內部),在整個的函數中都是有聲明的

function f(){
for (var i=0;i<10;i++){ //此處i在for循環中的變量
if(i==5){
var k = 5; //此處k在if塊中定義 
break;
}
}
alert("i=" + i + "----k =" + k);//只要是在函數內部的變量我們都可以使用它

}

  引發思考的例子

    var scope = "global";
function f2(){
alert(scope); //提示undefined
var scope = "local";
alert(scope); //提示local

}

 

  解析:第一次alert提示scope undefined ,而我們又定義了全局變量scope?????

     由於變量的定義沒有塊級作用域這個規則的限制,局部變量在整個函數內部都是有定義的,這就意味着整個函數體中都隱藏了同名的全局變量,

    第一次alert, 局部變量scope是已經被聲明了,但是沒有初始化值,所以提示undefined;

    而第二次的alert,是在scope = "local" 之后的,也就是局部變量scope完成了初始化,所以提示為local。

    該例子中的代碼相當於

    

var scope = "global";
function f2(){
var scope; //聲明局部變量scope,未初始化
alert(scope);
scope = "local";//初始化scope
alert(scope);

}
  • 未定義的變量和未賦值的變量

  未定義的變量:指沒有聲明並且沒有初始化的變量,嘗試讀取這種變量會產生一個錯誤。

       注: 這里要區分開沒有聲明但初始化了的變量,這種變量不會引起錯誤,程序會在全局變量中隱式的聲明該類變量。

  未賦值的變量:指已經聲明但沒有初始化的變量,嘗試讀取該類變量將得到一個默認值undefined.

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM