JS全局變量VAR和THIS--在函數內部,加var是局部變量,不加是全局變量

JS全局變量VAR和THISjavascript

2011-05-23 21:43

 

 

不少人都以爲在JavaScript聲明一個變量,加var和不加var沒有什麼區別,其實是一個錯誤的觀點,若是在函數外面,也就是說在window區域加不加var確實是同樣,由於都會是全局變量的效果,而若是在函數內部,加var就是局部變量,不加是全局變量。 
function test(){   
  var1 = 2; 
  alert(var1);      
}   
test();   
alert(var1); 
這樣能夠顯示爲2 
function test(){   
  var var1 = 2; 
  alert(var1);      
}   
test();   
alert(var1); 
則爲變量未定義錯誤 

this多用於函數內部,它永遠指向調用他的那個對象,看看下面的例子就明白了 

var test={ 
   a:"test", 
   msg:function(){ 
     a="1234"; 
     alert(this.a); 
     var msg1= function(){ 
alert(this.a); 
     } 
     msg1(); 
   } 

test.msg(); 這樣會分別顯示 "test" ,"1234". 

但this也不是這麼簡單,在看看下面的例子 
function test1()   
{   
  this.var01 = "test"; 


function test2()   

  alert(var01); 


var a= new test1(); 
test1(); 
test2(); 
alert(a.var01); 
均可以獲得"test". 
能夠發現var01變量既是一個全局變量,又是test1內的成員變量。也就是說,若是在函數內部用this定義的變量,若是這個函數你不是直接來運行,而是做爲一個類來new的話,雖然函數也要執行一遍,但裏面的this定義的 變量是做爲類的成員變量來定義的,也就是一個局部變量,上面的測試代碼,若是去掉test1();  test2()運行就是未定義變量錯誤了。 

說到變量,最後提一下js變量無類型的說法,這個說法自己沒有錯,但js變量無類型,這話很模糊,有的人會理解成js 裏面沒有數據類型。這顯然是錯誤的,js 裏面也有數字,字符,布爾,類等數據類型。說變量無類型,指的是剛定義一個變量的時候,這個變量是沒有類型的,當你給它賦值的時候,值是什麼類型,那這個變量就是什麼類型了html

——————————————————————————————————————————————————————java

實例 - 無窮循環

要建立一個運行於無窮循環中的計時器,咱們須要編寫一個函數來調用其自身。在下面的例子中,當按鈕被點擊後,輸入域便從 0 開始計數。函數

<html>

<head>
<script type="text/javascript">
var c=0
var t
function timedCount()
 {
 document.getElementById('txt').value=c
 c=c+1
 
 }
</script>
</head>

<body>
<form>
<input type="button" value="Start count!" onClick="timedCount()">
<input type="text" id="txt">
</form>
</body>

</html>t=setTimeout("timedCount()",1000)
相關文章
相關標籤/搜索