js变量生命周期
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" type="text/css" href="calc.css"> <script type="text/javascript" src="calc.js"></script> </head> <body onload="init()"> <div id="div1"> <div> <input type="text" name="" id="num"> </div> <div> <input type="button" name="" value="C"> <input type="button" name="" value="←"> <input type="button" name="" value="+/-"> <input type="button" name="" value="/"> <input type="button" name="" value="1"> <input type="button" name="" value="2"> <input type="button" name="" value="3"> <input type="button" name="" value="*"> <input type="button" name="" value="4"> <input type="button" name="" value="5"> <input type="button" name="" value="6"> <input type="button" name="" value="-"> <input type="button" name="" value="7"> <input type="button" name="" value="8"> <input type="button" name="" value="9"> <input type="button" name="" value="+"> <input type="button" name="" value="0"> <input type="button" name="" value="."> <input type="button" name="" value="="> <input type="button" name="" value="m"> </div> </div> </body> </html>
*{
margin: 0px;
padding: 0px;
}
div{
width:200px;
}
#div1{
position: absolute;
top: 100px;
left: 100px;
}
input[type="button"]{
width:40px;
margin-right:5px;
margin-bottom:5px;
}
input[type="text"]{
width:189px;
margin-bottom:5px;
text-align:right;
background-color:#ffffff;
border:1px solid;
box-sizing:border-box;
padding:0px 2px;
}function init(){
var num = document.getElementById("num");
num.value = 0;
num.disabled = "disabled";//禁用文本框
var num_value;
var oButton = document.getElementsByTagName("input");//给button添加事件
for(var i = 0; i < oButton.length-1; i++){
oButton[i].onclick = function(){
//var num_value = 1;
if(!isNaN(this.value)){
num.value = (num.value + this.value)*1;
}
else{
switch(this.value){
case"+":
num_value = Number(num.value);
num.value = 0;
fh = "+";
break;
case"-":
num_value = Number(num.value);
num.value = 0;
fh = "-";
break;
case"*":
num_value = Number(num.value);
num.value = 0;
fh = "*";
break;
case"/":
num_value = Number(num.value);
num.value = 0;
fh = "/";
break;
case".":
if(num.value.indexOf(".") == -1){//判断小数点是否存在
num.value += ".";
}
break;
case"C":
num.value = 0;
break;
case"←":
if(num.value.length>1){
num.value = num.value.substring(0, num.value.length-1);
}else{
num.value = 0;
}
break;
case"+/-":
num.value *= -1;
break;
case"=":
switch(fh){
case"+":
num.value = num_value + Number(num.value);
break;
case"-":
num.value = num_value - Number(num.value);
break;
case"*":
num.value = num_value * Number(num.value);
break;
case"/":
if(Number(num.value)==0){
alert("除数不能为0");
num.value = 0;
}else{
num.value = num_value / Number(num.value);
}
break;
}
break;
}
}
}
}
}代码是根据这节课的思路写出来的,请教老师几个问题:
1、init()中定义了局部变量num与num_value,在给元素添加事件的时候使用到了这两个变量,内层函数掉用外层函数的局部变量这个我理解。
在初始化完成后init()掉用结束,num与num_value都应该被销毁了,但是后面单击事件时调用的方法function()却可以直接使用num,num_value,fh 这是三个变量,而且我理解的"+"按钮点击事件结束之后方法也就结束了,变量应该被销毁了,为是什么再次使用"="按钮事件中可以使用到num_value与fh的值???
2、onload是否初始化后就直接结束了?
28
收起
正在回答
3回答
同学你好,1、因为JavaScript是弱类型语言,不声明也可直接使用,而且默认是全局变量。
所以fh也可以理解为全局变量,此时fh就是作为一个全局变量在使用呐。
2、每个元素绑定的事件实际上可以理解为每个oButton[i]元素都添加了一个单独的函数,并不是说它是同一个函数。
继续加油 祝:学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星