欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

关于var用法的总结

程序员文章站 2024-01-02 14:04:10
...
  在做慕课的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用法的总结的详细内容,更多请关注其它相关文章!

相关标签: 关于

上一篇:

下一篇: