zoukankan      html  css  js  c++  java
  • 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这个结果。这样使用变量实际上是错误的,大家应该避免。



  • 相关阅读:
    鼠标移到某个对象上,显示小手的形状
    前端开发过程中的一些小知识点总结
    滚动新闻插件vticker
    tab选项卡
    给SqlParameter参数指定或不指定:@变量标识符的区别是什么?
    c# 一个记录日志的通用方法
    DataTable和实体类通过反射相互转换
    通过计算获得一个使用最少量充值卡满足充值额度的方案
    动态规划问题
    DFS排列组合问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4065794.html
Copyright © 2011-2022 走看看