首頁  >  文章  >  web前端  >  關於var用法的總結

關於var用法的總結

巴扎黑
巴扎黑原創
2017-06-23 10:50:201781瀏覽

  在做慕課的javascript的教學時,遇到了一些關於 var 的問題。

  一個是對於函數中變數宣告的問題,發現不論用不用 var宣告(req1丶req2丶sumq),程式都可以正常運作。程式碼如下:

 1       <script > 2           function  app2(x,y) 3           { var sum,x,y; 4             sum = x * y; 5             return sum ; 
 6           } 7            req1 = app2(5,6);  //var req1 = app2(5,6); 8            req2 = app2(2,3);  //var req2 = app2(2,3); 9            sumq = req1 + req2;   //var sumq = req1 + req2; 10            document.write("req1的值:"+req1+"<br/>");11            document.write("req2的值:"+req2+"<br/>");12            document.write(req1+"与"+req2+"和:"+sumq);13        </script>

  有點困惑,網路上搜了下,看了下書。 《javascript語言精粹》中提到:直接使用未經宣告的變量,這稱為隱式的全域變數。這種方式本來是為方便初學者的,有意讓變數在使用前無須聲明。但是,忘記宣告變數成了一個非常普遍的錯誤。 javascript的策略是讓那些忘記預先宣告的變數成為全域變量,但這可能會導致bug非常難找。所以應該避免使用全域變數。

  還有一個困惑也是和 var 有關的,也是慕課上的。程式碼如下:

 1 <!-- 要创建一个运行于无穷循环中的计数器,我们需要编写一个函数来调用其自身。在下面的代码, 2 点击Start按钮,从0开始计数;点击Stop按钮,停止计数。 --> 3     <!DOCTYPE HTML> 4     <html> 5     <head> 6     <meta charset="utf-8"> 7     <script type="text/javascript"> 8           var num=0; 9           var i;                                        //不声明,不会显示错误。.10           function numCount(){11            document.getElementById('txt').value=num;12            num=num+1;13            i = setTimeout("numCount()",1000);           //若为var i ...,则错误。14            }15             function stopCount() {16             clearTimeout(i);17             }18     </script>19     </head>20     <body>21           <form>22           <input type="text" id="txt" />23           <input type="button" value="Start" onClick="numCount()" />24           <input type="button" value="Stop" onClick="stopCount()" />25           </form>26     </body>27     </html>

 

 

 

##  上面的程式碼是正確的,可以正常執行。但當刪除第9行程式碼(var i;)時,程式仍然可以正常運行,問題和上面提到的是一樣的:直接使用未聲明的變數時,這個變數就會變成全域變量,所以運行正確。但當第13程式碼變成:

var i = setTimeout("numCount()",1000);

時,無論刪除不刪除第9行程式碼,程式執行都是錯誤的。這是因為:在函數作用域內,加 var 宣告的變數是局部變量,不加 var 宣告的就成了全域變數。 所以用var 宣告之後,變數 i 是局部變量,所以會導致程式錯誤。

  還有在全域作用域下,使用 var 定義的變數不可以 delete,沒有 var 定義的變數可以 delete 。也就是說:隱式全域變數嚴格來說不是真正的變量,而是全域物件的屬性,因為 屬性可以透過  delete 刪除,而變數不可以。  

 

#

以上是關於var用法的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn