if else的自定义变量作用范围问题

来源:4-11 编程练习

localhost999

2021-09-20 17:11:50

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>onblur和onfocus</title>
    <style type="text/css">
        .red{
    		border:1px solid red;
    	}
    </style>
</head>
<body>
	<div>
		姓名:<input type="text"> <span></span>
	</div>
	<script type="text/javascript">
		var kuan=document.getElementsByTagName('input');
		// var x =document.getElementsByTagName('span');
		kuan[0].onfocus=function(){
			var x =document.getElementsByTagName('span');
			x[0].innerText="请输入姓名";
		};

		kuan[0].onblur=function(){
			if(kuan[0].value==""){
				var x =document.getElementsByTagName('span');
				x[0].innerText="用户名不能为空";
			} else{
				x[0].innerText="";

			}
		}
	</script>
</body>
</html>

老师为什么26行x的定义必须放到18行全局定义变量才行?在26行定义不也是属于下面这个函数里面的变量吗?x在if(kuan[0].value=="")条件里面能用,到了else条件就不能用了,为啥?在同一个函数里面定义的变量x,不是无论在if里面还是else里面都能用吗?

		kuan[0].onblur=function(){
			if(kuan[0].value==""){
				var x =document.getElementsByTagName('span');
				x[0].innerText="用户名不能为空";
			} else{
				x[0].innerText="";

			}
		}
写回答

1回答

好帮手慕然然

2021-09-22

同学你好,在同一个函数中定义的变量,只要在这个函数作用域内都可以访问,与if...else的关系不大。

但是这段代码中,将var x =document.getElementsByTagName('span')放在了if语句中,说明只有满足if条件时这句代码才会执行。但是如果不满足if条件,直接执行else中的代码,那么此时在else中肯定是无法使用变量x的(此时还没有定义),所以建议将这句代码放到if语句外面,if和else中都可以使用了,如图

https://img.mukewang.com/climg/614aa49009f02c3707430515.jpg

或者就像同学所说的放在18行定义成全局变量也可以。

祝学习愉快!

0

0 学习 · 17877 问题

查看课程