【问题标题】:Why FOR loop iterates only once?为什么 FOR 循环只迭代一次?
【发布时间】:2017-10-13 04:41:09
【问题描述】:

我一直在读一本面向初学者的书,《First-Head HTML5 Programming》,里面有这段代码:

var movie2 = {
    title: "Forbidden Planet",
    genre: "Classic Sci-fi",
    rating: 5,
    showtimes: ["5:00pm", "9:00pm"]
  };

  function getTimeFromString(timeString) {
    var theTime = new Date();
    var time = timeString.match(/(\d+)(?::(\d\d))?\s*(p?)/);
    theTime.setHours( parseInt(time[1]) + (time[3] ? 12 : 0) );
    theTime.setMinutes( parseInt(time[2]) || 0 );
    return theTime.getTime();
  }


  function getNextShowing(movie) {
    var now = new Date().getTime();

    for (var i = 0; i < movie.showtimes.length; i++) {
      var showtime = getTimeFromString(movie.showtimes[i]);
      if ((showtime - now) > 0) {
        return "Next showing of" + movie.title + " is " + movie.showtimes[i];
      }
    }
   return null;
  }

目前,如果我打电话给getNextShowing(movie2),它会返回下一场演出是在下午 5:00。 我将循环条件更改为“i movie.showtimes.length;”但它仍然只运行一次并且只显示下午 5:00。 即使我重写此函数,循环也只会迭代一次:

function getNextShowing(movie) {
    var now = new Date().getTime();

    for (var i = 0; i <= movie.showtimes.length; i++) {
      var showtime = getTimeFromString(movie.showtimes[i]);
      return "Next showing of" + movie.title + " is " + movie.showtimes[i];
    }
   return null;
  }

我在这里没有得到什么吗? 在第一次迭代 i=0 时,循环运行并在索引 0 处显示 showtimes 的项目。之后它是 i=1,它应该在索引 1 上显示项目,不是吗?

它不应该运行两次吗?

【问题讨论】:

  • 想想return做了什么你就会明白
  • @SamiKuhmonen 哦

标签: javascript arrays loops for-loop


【解决方案1】:

你必须知道return关键字的细节。

您可以查看this link 了解更多详情。谢谢。

【讨论】:

    【解决方案2】:

    如果像我这样的白痴遇到这个“问题” - 这完全是因为return 结束了函数执行。哎呀..

    【讨论】: