zoukankan      html  css  js  c++  java
  • 关于 var

      在做慕课的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 删除,而变量不可以。  

  • 相关阅读:
    TWaver3D直线、曲线、曲面的绘制
    react开发教程(六)React与DOM
    java Web开发实现手机拍照上传到服务器
    手把手教你从零写一个简单的 VUE--模板篇
    file_get_contents函数获取不到数据的一种情况
    Windows系统下批处理快速创建WIFI
    操作系统题库之简答题部分(个人整理,附带答案)
    回溯到底是个什么东西(含有大量经典例题加详细分析)
    到底什么是dp思想(内含大量经典例题,附带详细解析)
    一次性弄懂到底什么叫做分治思想(含有大量经典例题,附带详细解析)
  • 原文地址:https://www.cnblogs.com/wangmengjun/p/7066808.html
Copyright © 2011-2022 走看看