老师帮吗看看我定义的这个全局变量btm1为什么不能被我的方法赋值呢

老师帮吗看看我定义的这个全局变量btm1为什么不能被我的方法赋值呢

function init(){
var num=document.getElementById("num")
num.value=0;
var btm1;
var fh;
var input=document.getElementsByTagName("input");
for (var i = 0; i < input.length; i++) {
input[i].onclick=function(){

if(isNumber(this.value)){
if(isNull(num.value)){
num.value=this.value;
}else{
num.value=num.value+this.value;
}

}else{
var btm=this.value;

switch(btm){
case "+":
yunsuan(btm1,num);
alert(btm1)
fh="+";
break;
case "-":
break;
case "*":
break;
case "/":
break;
case "=":
switch(fh){
case "+":
var n=parseInt(num.value);
num.value=btm1+n;
console.log(btm1);
break;
}
break;
case ".":
break;
case "c":
break;
case "←":
break;
case "+/-":
break;

}
}
}
}

function yunsuan(n,n1){
n=parseInt(n1.value);
n1.value=0;


}

相关截图:

http://img1.sycdn.imooc.com//climg/609a66ad092512b512950640.jpg

尝试过的解决方式:

我在赋值的方法中经过弹窗测试,参数n是可以被正常赋值的,但是就是不知道为什么带不到btm1去

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好

首先弹出undefined是因为同学初始化时未给btm1进行赋值,其次是因为除了数组之外,其他类型在函数中的值不会改变其本身的值,原理跟java类型,所以这里给btm1赋值后弹出的也是原来的值

祝学习愉快~

  • 加1s的阿呱 提问者 #1
    大概明白了,也就是说,btm1在方法中被赋值,其作用域只在这个赋值方法中有效,出了这个方法了,btm1就又重新变为未初始化的状态了是吧?那想请问一下老师,该如何优化这个btm1的赋值代码,达到减少重复性,将重复的赋值功能编写在一个函数中呢?
    2021-05-12 11:04:27
  • 加1s的阿呱 提问者 #2
    老师我明白了,方法带返回值就行了
    2021-05-12 16:35:08
好帮手慕阿园 2021-05-12 16:19:45

同学你好

1、是的,可以这么理解

2、同学是要给btm1进行赋值吗,如果是,可以通过返回值的形式试试,如下

function yunsuan(n,n1){
n=parseInt(n1.value);
return n;
}
btm1=yunsuan(btm1,num);

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师