1-20问题

1-20问题

	           
    function riqi(y,m,d) {
                var   y = parseInt(prompt("请输入您的出生年份"));
                var   m = parseInt(prompt("请输入您的出生月份"));
                var   d = parseInt(prompt("请输入你的出生日期"));
                a = 0;
        if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
            while (m == 2) {
                a = (m - 1) * 31 + d;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
            while (m > 2 && m % 2 == 0) {
                a = (m / 2 - 1) * 30 + 29 + m / 2 * 31;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
            while (m > 2 && m % 2 !== 0) {
                a = (m - 3) / 2 * 30 + 29 + (m + 1) / 2 * 31;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
            while (m < 2) {
                a = d;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
        } else {
            while (m == 2) {
                a = (m - 1) * 31 + d;
                return "您的出生日期在那一年是第" + a + "天";
                break;
            }
            while (m > 2 && m % 2 == 0) {
                a = (m / 2 - 1) * 30 + 28 + m / 2 * 31;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
            while (m > 2 && m % 2 !== 0) {
                a = (m - 3) / 2 * 30 + 28 + (m + 1) / 2 * 31;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
            while (m < 2) {
                a = d;
                return "您的出生日期在" + y + "年是第" + a + "天";
                break;
            }
        }
        alert(riqi(y, m, d));
    }

老师,为什么我把这个var声明放在函数体之内后,运行时没有任何反应,什么框都没有弹出来



          var   y = parseInt(prompt("请输入您的出生年份"));

                var   m = parseInt(prompt("请输入您的出生月份"));

                var   d = parseInt(prompt("请输入你的出生日期"));

                a = 0;

    function riqi(y,m,d) {

                

        if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {

            while (m == 2) {

                a = (m - 1) * 31 + d;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

            while (m > 2 && m % 2 == 0) {

                a = (m / 2 - 1) * 30 + 29 + m / 2 * 31;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

            while (m > 2 && m % 2 !== 0) {

                a = (m - 3) / 2 * 30 + 29 + (m + 1) / 2 * 31;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

            while (m < 2) {

                a = d;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

        } else {

            while (m == 2) {

                a = (m - 1) * 31 + d;

                return "您的出生日期在那一年是第" + a + "天";

                break;

            }

            while (m > 2 && m % 2 == 0) {

                a = (m / 2 - 1) * 30 + 28 + m / 2 * 31;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

            while (m > 2 && m % 2 !== 0) {

                a = (m - 3) / 2 * 30 + 28 + (m + 1) / 2 * 31;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

            while (m < 2) {

                a = d;

                return "您的出生日期在" + y + "年是第" + a + "天";

                break;

            }

        }

        alert(riqi(y, m, d));

    }

当我把var声明移出去之后,可以弹出前三个输入框,点击最后一个框的确定按钮之后就什么都没弹出来了,但我把alert那句话移出函数体之后就能给我弹出最后一个计算日期结果的值得框了,请问这是为什么??

正在回答

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

2回答

封装的一个函数,调用的时候要在函数外部调用。在函数外部调用是,你传入了y,m,d等参数,但是这三个参数在函数内容是拿不到的,所以要把var声明拿到外面作为全局变量。

测试了你的代码,天数的计算是错误的,例如:输入平年的三月份,会多出一个月,并且你还没有添加输入的天数。不建议使用奇偶数来计算天数,因为31天就有7个月,是不平均的,可以使用下面的方法,参考:

使用数组循环对月份天数进行相加,如果是闰年,总天数+1,如果是平年,总天数保持不变。

自己试着写一写,祝学习愉快~~


  • 谢谢您的解答,那老师我的第二个问题是怎么回事儿呢,把var声明移出函数体之后,就只弹前三个输入框,点击完最后一个确定后网页就没反应了,这是为什么?
    2018-07-25 17:02:18
  • 我知道了,声明在函数体外面就要在外面调用函数是吧 那我看人家有的把声明放里面了,那是怎么做的
    2018-07-25 17:05:29
好帮手慕星星 2018-07-25 17:54:49

第二个中把调用的代码放在外面就可以了。如果想要把声明放在里面,可以不用传参数,在函数中直接使用变量就可以了还是在外面调用。

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

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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