问答详情
源自:1-5 编程练习

定义checkTime函数时,i=(i<10)?("0"+i):i;显示i未定义,为什么?写成return (i<10)?("0"+i):i;好了,这是为什么?有点糊涂,望大神指点迷津

<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>按格式动态显示时间:2017年8月15日 星期二 16:28:09</title>
    <style type="text/css">
    #show{
    width:1000px;height:20px;background:pink;
    }
    </style>
  </head>
  <body>
    <div id="show">显示时间的位置</div>
    <script type="text/javascript">
    window.onload = function() {
      //让时间动起来
      setInterval(showTime, 500); //刷新时间<1s,思考为什么?只要小于1000能被1000整除的数字都是可以的,比如100,200,500,1000。
      
      //封装一个函数,来检查时分秒
      function checkTime(i) {
        // if (i < 10) {
        //   i = "0" + i;
        // } else {
        //   return i;
        // }
        //写法二:i=(i<10)?("0"+i):i;错误i未定义,为什么?
        return (i<10)?("0"+i):i;
      }

      function showTime() {
        //时间是静态的
        var now = new Date();
        var month = now.getMonth() + 1;
        var weekends = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"];
        var day = weekends[now.getDay()];
        // 写法二:var day="星期"+"日一二三四五六".charAt(now.getDay());

        document.getElementById("show").innerHTML = now.getFullYear() + "年" + month + "月" + now.getDate() + "日" + "&nbsp;&nbsp;" + day + "&nbsp;&nbsp;" + checkTime(now.getHours()) + ":" + checkTime(now.getMinutes()) + ":" + checkTime(now.getSeconds());
      }
    }
    </script>
  </body>
</html>


提问者:风到这里就是粘 2017-08-15 16:53

个回答

  • 风飘叶摇
    2017-09-24 00:10:10
    已采纳

    楼上那位朋友说的是对的,在这个函数里,i只是一个代表你将要传递给函数的参数,实际上你要传递给函数的参数是m和s。i只是代表一个被复制过来的参数值,并不是一个实际存在的变量。

    如果你要写成i=(i<10)?("0"+i):i;那这个函数第一句你要先定义一个变量var i=i;这里代表的是你将你要传递给函数的参数先赋值给变量i。

    //封装一个函数,来检查时分秒

          function checkTime(i) {

            // if (i < 10) {

            //   i = "0" + i;

            // } else {    

            //   return i;    

            // }

    /*写法一:if语句后边不用再写一个else,直接把return i写在if语句外边,否则当m和s小于10的时候会报错。

        if(i<10){

        i="0"+i;

    }

    return i;

    */

            //写法二:i=(i<10)?("0"+i):i;错误i未定义,为什么?

            //写法二:var i=i;     i=(i<10)?("0"+i):i;     return i;  这么改就对了,但是实际上反而写复杂了,代码应该尽量写得简洁易懂。便于维护,写得太复杂会影响网页性能,看起来也不美观哈。

            return (i<10)?("0"+i):i;    

          }

    另外这个写法是三元表达式的写法,确实挺好用,你可以百度下。

  • ella_rm
    2018-07-26 09:35:02

    https://img.mukewang.com/5b59244a0001244203660166.jpg

    这样写的话,不会报错,只是会有些麻烦。其实感觉是因为这个函数需要返回一个值,不写return的话函数默认返回一个undefined。

  • 慕容8199756
    2017-09-23 17:21:55

    这里的undefined应该是未定义的值吧;毕竟在function(i){}里,i是只是他的一个参数,i=****最终还是一个值,你必须得让它return返回给引用他的函数,emmmm。。我是这么理解的。

    return i= i<10?"0"+i:i;    这样是可以的。

    (萌新,勿喷,,,)

  • 这人不懒_学习刻苦
    2017-08-18 20:26:35

    <head>
        <meta charset="UTF-8">
        <title>按格式动态显示时间:2017年8月15日 星期二 16:28:09</title>
        <style type="text/css">
        #show{
        width:1000px;height:20px;background:pink;
        }
        </style>
      </head>
      <body>
        <div id="show">显示时间的位置</div>
        <script type="text/javascript">
        window.onload = function() {
          //让时间动起来
          // setInterval(showTime, 500); //刷新时间<1s,思考为什么?只要小于1000能被1000整除的数字都是可以的,比如100,200,500,1000。
          setInterval(showTime,1000);//1000ms是1s 。。。。。。秒!不是500毫秒!!!
          //封装一个函数,来检查时分秒
          function checkTime(i) { 
             // return (i<10)?("0"+i):i;  //为什么要加括号!这个是三目运算符
              return i<10 ? "0"+i : i;
          }
          // 补:
          // 不调用怎么执行下面!
          showTime();
          function showTime() {
            //时间是静态的 (错!)
            //获取本地时间
            var now = new Date();
            // 年
            var year = now.getFullYear();
            // 月
            var month = now.getMonth() + 1;
            // 天
            var day = now.getDate();
            // 时
            var hour = now.getHours();
            // 分
            var minutes=now.getMinutes();
            // 秒
            var seconds=now.getSeconds();
            // 星期
            var week = now.getDay();
            // var weekends = ["星期一","星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]; 
            //星期是从0开始计!0代表星期日,1代表星期一,以此类推。
            var weekends = ['星期天','星期一','星期二','星期三','星期四','星期五','星期六'];
            var thisWeek = weekends[week];
           
            // 简单点不是更好的?
            document.getElementById("show").innerHTML = year + "年" + month + "月" + day + "日" + "&nbsp;&nbsp;" + thisWeek + "&nbsp;&nbsp;" + checkTime(hour) + ":" + checkTime(minutes) + ":" + checkTime(seconds);
          }
        }
        </script>
      </body>
    </html>

    自己看完总结吧