为了账号安全,请及时绑定邮箱和手机立即绑定

定义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>


正在回答

4 回答

楼上那位朋友说的是对的,在这个函数里,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;    

      }

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

1 回复 有任何疑惑可以回复我~
#1

风到这里就是粘 提问者

非常感谢!
2017-09-26 回复 有任何疑惑可以回复我~
#2

风飘叶摇 回复 风到这里就是粘 提问者

不客气,我也是新人,自己学习看的很慢,很多概念的东西是看别的视频呀,书呀看来的,慕课的东西还不算太全面,基础的东西看看书,或者看多几个不同的视频还是有所帮助的,能够帮到你我也很开心。
2017-09-26 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b59244a0001244203660166.jpg

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

0 回复 有任何疑惑可以回复我~

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

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

(萌新,勿喷,,,)

1 回复 有任何疑惑可以回复我~
<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>

自己看完总结吧

1 回复 有任何疑惑可以回复我~
#1

风到这里就是粘 提问者

第一点,// 不调用怎么执行下面! showTime();setInterval(showTime, 500);已经间歇调用,没必要再单独调用 第二点,你不觉得下面的年月天时分秒根本没必要写那么累赘吗? 第三点,你没有回答我的问题,可以写成return (i<10)?("0"+i):i;为什么i=(i<10)?("0"+i):i;不行? 第四点,你的代码没什么要总结的
2017-08-19 回复 有任何疑惑可以回复我~
#2

这人不懒_学习刻苦 回复 风到这里就是粘 提问者

为什么要加括号??简单点不好么?
2017-08-19 回复 有任何疑惑可以回复我~
#3

风到这里就是粘 提问者

回复 这人不懒_学习刻苦兄台,这个括号不加是很简单,可这个关注点能不集中在这个括号上么
2017-08-19 回复 有任何疑惑可以回复我~
#4

这人不懒_学习刻苦 回复 风到这里就是粘 提问者

说了那么多没意思。你觉得你对就对吧,采不采纳算罢了- - ‖
2017-08-19 回复 有任何疑惑可以回复我~
#5

风到这里就是粘 提问者 回复 这人不懒_学习刻苦

不加括号采纳,我的问题的重点是return返回和i=一堆的区别
2017-08-19 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消
倒计时效果
  • 参与学习       55626    人
  • 解答问题       242    个

电商网站限时抢购倒计时效果计算思路和方法,前端开发必备技术

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信