当前位置: 首页 > 编程笔记 >

javascript中错误使用var造成undefined

闻人树
2023-03-14
本文向大家介绍javascript中错误使用var造成undefined,包括了javascript中错误使用var造成undefined的使用技巧和注意事项,需要的朋友参考一下

在javascript中根据变量作用的范围不同分为局部变量和全局变量,直接定义的变量是全局变量,全局变量可以被所有的脚本访问;在函数中定义的变量是局部变量,局部变量只在函数内有效。
如果全局变量和局部变量使用相同的变量名,则局部变量将会覆盖全局变量。
例子代码

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>js中全局变量与局部变量</title> 
  </head> 
  <body> 
    <script type="text/javascript"> 
      var a = "全局变量"; 
      function test1() 
      { 
        var a = "局部变量"; 
         
        alert(a); 
      } 
       
      function test2() 
      { 
        alert(a); 
         
        var a = "局部变量"; 
         
        alert(a); 
      } 
       
      function test3() 
      { 
        alert(a); 
         
        a = "局部变量"; 
         
        alert(a); 
      } 
    </script> 
     
    <input type="button" value="test1" onclick="test1()"/> 
    <input type="button" value="test2" onclick="test2()"/> 
    <input type="button" value="test3" onclick="test3()"/> 
 
  </body> 
</html> 

运行的结果是这样的:
点击test1 ,弹出局部变量。
点击test2,弹出undefined,再弹出局部变量
 
点击test3,弹出全局变量,再弹出局部变量

这就是使用var和不使用的区别所在:
如果使用var,那么程序会强制定义一个新变量。
如果没有使用var,系统会优先在当前上下文中搜索是否存在该变量,只有在不存在的前提下才会重新定义一个新变量。

test3中,使用的变量a均为全局变量,第一次直接输出了全局变量,第二次是直接为全局变量赋值之后使用。
test1和test2中都存在在function中使用var定义同名新变量,会导致函数中的变量覆盖掉全局变量。所以在test2中:第一次输出的a是已经被覆盖了的局部变量a,但是没有给予初值,所以会出现undefined这个结果。这样使用变量实际上是错误的,大家应该避免。

 类似资料:
  • 本文向大家介绍为什么JavaScript的“ var null”抛出错误而“ var undefined”没有抛出错误?,包括了为什么JavaScript的“ var null”抛出错误而“ var undefined”没有抛出错误?的使用技巧和注意事项,需要的朋友参考一下 Web浏览器会抛出“ var null”错误,因为它是保留的标识符。 您不能在ECMAScript中使用以下文字作为标识符-

  • 这是一个简单的问题,但我不知道该怎么办。我正在使用JDK 8,现在无法使用var,那么应该如何声明该列表以避免出现该错误呢??请帮忙,谢谢你,祝福你 在此处输入图像描述

  • 主要内容:Java11 Lambda中使用var的示例,Java11 Lambda中使用var的限制Java 11 允许在 lambda 表达式中使用 var,它可用于将修饰符应用于局部变量。 Java11 Lambda中使用var的示例 ApiTester.java 输出结果为 Java11 Lambda中使用var的限制 在 lambda 表达式中使用 var 有一定的限制。 var 参数不能与其他参数混合使用。以下将抛出编译错误。 var 参数不能与其他类型参数混合使用。以下将抛出编译错误

  • 问题内容: 我正在尝试使用Ajax.BeginForm()从我的控制器发布Json结果(我正在使用MVC3)。调用Json结果时,应将其发送到javascript函数并使用提取对象 但是,在尝试调用Ajax POST时,它只会引发“ Microsoft JScript运行时错误:对象不支持此属性或方法”。 我的代码: 控制器: 视图: 奇怪的是,完全相同的代码可以在MVC2中使用-这是一个错误,还

  • 问题内容: 我正在尝试在以下URL上执行JavaScript :。我可以使用谷歌浏览器通过按ctrl + shift + j并粘贴以下脚本来打开控制台: 它返回:150然后在下一行中,我写: 并且它返回长度为150的数组。 当我尝试这样做时: 我收到以下异常: 导致异常的行是: 那么,我应该如何从HtmlUnit执行此脚本,就像在Google Chrome控制台中一样? 问题答案: 这些是您的框架

  • 问题内容: 我正在创建一些类来处理各种类型的文件共享(nfs,afp,s3,本地磁盘)等中的文件名。当用户输入时,会得到一个标识数据源(即或)的字符串。 我从具有通用代码的基类中继承特定文件系统。我感到困惑的是对象创建。我有以下内容: 我以为这会很好用,但我读过的大多数文章都劝阻它。有没有更公认的方法来解决此问题? 问题答案: 我 不 认为用做你想要的东西是不正确的。换句话说,我不同意这个问题)的

  • 在kotlin引用的属性和字段一节中,写了以下示例: var AllByDefault:int?//错误:需要显式初始化器,隐含默认getter和setter @toniedzwiedz的回答解决了这个问题。这是我的错.我把属性和变量搞错了。

  • 本文向大家介绍浅析JavaScript中var that=this,包括了浅析JavaScript中var that=this的使用技巧和注意事项,需要的朋友参考一下 在阅读别人的代码时,发现别人写的代码中有这么一句:var that = this;,这代表什么意思呢?经过一番查阅,才明白是这么回事。 在JavaScript中,this代表的是当前对象。 var that=this就是将当前的th