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回答
同学你好,在同一个函数中定义的变量,只要在这个函数作用域内都可以访问,与if...else的关系不大。
但是这段代码中,将var x =document.getElementsByTagName('span')放在了if语句中,说明只有满足if条件时这句代码才会执行。但是如果不满足if条件,直接执行else中的代码,那么此时在else中肯定是无法使用变量x的(此时还没有定义),所以建议将这句代码放到if语句外面,if和else中都可以使用了,如图
或者就像同学所说的放在18行定义成全局变量也可以。
祝学习愉快!
相似问题