DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> js變量作用域及可訪問性的探討
js變量作用域及可訪問性的探討
編輯:關於JavaScript     

每一種語言都有變量的概念,變量是用來存儲信息的一個元素。比如下面這個函數:

 1function Student(name,age,from)
 2{
 3 this.name = name;
 4 this.age = age;
 5 this.from = from;
 6 this.ToString = function()
 7 {
 8  return "my information is name: "+this.name+",age : "+this.age+", from :" +this.from;
 9 }
10}
   Student類有三個變量,分別為name(名字),age(年齡),from(籍貫),這三個變量構成了描述一個對象的信息。當然,這裡還有一個方法用來返回Student的信息。
   但是,我們是不是定義了一個變量,它就能一直存在著,並且還有可能在任何地方都能被訪問和使用直到其被銷毀?仔細想想,上面的需求是比較過分的,因為某些變量在某個功能實現後就不再利用了,但如果這個變量還存在的話,就占用了系統資源了,俗語曰:“站著茅坑不拉#$%”。
   於是我們對變量的及時和按需求地銷毀有一個探討的話題了。
   好,切入正題吧,就本人所接觸過的來講,js中支持如下幾種類型的變量,分別為:局部變量、類變量、私有變量、實例變量、靜態變量和全局變量。接下來我們就一一探討研究下。

局部變量:

局部變量一般指在{}范圍內有效變量,也就是語句塊內有效的變量,如:

 1function foo(flag)
 2{
 3 var sum = 0;
 4 if(flag == true)
 5 {
 6  var index;
 7  for(index=0;index<10;index++)
 8  {
 9   sum +=index;
10  }
11 }
12 document.write("index is :"+index+"<br>");
13 return sum;
14}
15//document.write("sum is :" +sum+"<br>");
16document.write("result is :"+foo(true)+"<br>");
   該代碼執行後輸出的結果為:“index is :undefined” 和 “result is :0”,我們可以看到希望輸出的index變量的值為undefined,也就是未定義。因此我們可以發現,index變量在if語句塊結束後即被銷毀了。那麼“sum”變量呢?這個變量在foo()函數段執行完畢後被銷毀了,如果您去掉我注釋的那條語句,再執行,您將會發現系統將報錯。值得注意的是,如果我把上面的foo()函數改成如下:

 1function foo(flag)
 2{
 3 var sum = 0;
 4 for(var index=0;index<10;index++)
 5 {
 6  sum +=index;
 7 }
 8 document.write("index is :"+index+"<br>");
 9 return sum;
10}

   您將可以看見可以輸出index值("index is :10"),這個是js和其他語言的不同地方,因為index是在for循環的{}外面定義的,因此其作用范圍在foo()函數使用完畢後才銷毀。

  類變量:
   類變量,實際上就是類的一個屬性或字段或一個方法,該變量在該類的一個實例對象被銷毀後自動銷毀,比如我們開始時舉的Student類。這個我們不多討論,大家可以自己試一下。

私有變量:
   私有變量,值得是某個類自己內部是用的一個屬性,外部無法調用,其定義是用 var 來聲明的。注意如果不用var 來聲明,該變量將是全局變量(我們下面將會討論),如:

 1function Student(name,age,from)
 2{
 3
 4 this.name = FormatIt(name);
 5 this.age = age;
 6 this.from = from;
 7 var origName = name;
 8 var FormatIt = function(name)
 9 {
10  return name.substr(0,5);
11 }
12 this.ToString = function()
13 {
14  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;
15 }
16}
17
18
   這裡,我們分別定義了一個origName和FormatIt()兩個私有變量(按面向對象的解釋,應該用類的屬性來稱呼)。
   我們把這種情況下的方法也成為變量,因為該情況下的變量是個function類型的變量,而function也屬於Object類的繼承類。在這種情形下,如果我們定義了 var zfp = new Student("3zfp",100,"ShenZhen")。但無法通過zfp.origName和zfp.FormatIt()方式來訪問這兩個變量的。

注意以下幾點:

1、私有變量是不能用this來指示的。
2、私有方法類型的變量的調用必須是在該方法聲明後。如我們將Student類改造如下:

 1function Student(name,age,fro

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved