您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

关于var用法的总结

2026/2/9 21:34:52发布5次查看
在做慕课的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用法的总结的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product