老师,为什么 弹出输入的数字小了,接着弹出 恭喜你猜对了。代码有什么问题嘛?

老师,为什么 弹出输入的数字小了,接着弹出 恭喜你猜对了。代码有什么问题嘛?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Math.random()</title>
</head>
<body>
<script>
  //补充代码
    var arr=Math.floor(Math.random()*9+1);
    while (input!=arr) {
        var input=prompt("请输入你猜的数字");
        if (input>arr) {
        alert("输入的数字大了");
        } else {
        alert("输入的数字小了");
        }  
    }
    alert("恭喜你猜对了");
</script>
</body>
</html>


正在回答

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

2回答

同学你好,可以梳理一下执行过程,同学就明白了,如下
1、循环的条件是input != arr,在这个判断条件之前,input并没有定义,input是在循环体内定义的,因为预解析,变量提升,所以在循环开始之前,相当于var input=undefined。

如果这块内容不理解的话,没有关系,在后面的课程中会有讲解的,现阶段作为了解就可以了

2、接下来,我们来模拟一下执行过程,比如,随机数是2,可参考如下:

http://img1.sycdn.imooc.com//climg/5dcf67b909b6fec209300436.jpg

3、执行完上面的代码,input为1,

http://img1.sycdn.imooc.com//climg/5dcf690c09466f5714980475.jpg

所以出现了同学提到的,先弹出输入的数字小了,接着弹出 恭喜你猜对了

4、如果要实现本次练习的要求,可以参考第一次老师回答的建议,在循环体外声明input,因为是在循环外定义的,弹出框只会出现一次,所以在循环体内的最后再弹窗。

同学可以自己再理一下思路。

如果还有其他疑问,建议在问答区重新提问,便于后期查找总结

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕言 2019-11-15 13:38:46

同学你好,出现这种情况的原因是input是在循环里面声明的,第一次循环input的值为undefined,也是符合循环条件的,会进入循环。

建议:循环外侧声明input,进入循环,对值进行判断之后,再设置一个弹出窗

代码参考:

http://img1.sycdn.imooc.com//climg/5dce39930968688806590363.jpg

同学可以修改后再测试下,祝学习愉快~

  • 提问者 lily1109 #1
    为什么是undefined?有些input是放在循环内,有些是循环外。为什么在循环内input为undefined
    2019-11-15 22:41:18
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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