为什么这段代码执行无限循环?

时间:2016-06-08 14:11:57

标签: javascript arrays loops

  <script>
  $(document).ready(function(){
  var names = ['Hannah', 'Lucy', 'Brenda', 'Lauren', 'Mary'];
  var liked = [];
  var disliked = [];

         while(names.length > 0){

          document.getElementById('demo').innerHTML =  names[i];
          function likeOrDislike(choice){
          if(choice == 'Like')
          {
            liked.push(names[0])
            names.splice(0, 1)
          }
          else if (choice == 'Dislike')
          {
            disliked.push(names[i])
            names.splice(0, 1)
          }

        };
   };
 });
  </script>

我要求while循环继续,直到数组名称为空。 然后我让用户每次用数组中的第一个名称替换文本。 然后,我选择喜欢/不喜欢然后删除数组的第一个名称并重复该过程,直到名称数组为空。

然而,当我在浏览器中加载时,它不会加载页面,因为我认为它被卡在循环中

1 个答案:

答案 0 :(得分:3)

除了评论中指出的未定义i之外,您永远不会更改names

针对names的所有处理都是在function likeOrDislike()函数内完成的,您永远不会调用它。

所以这种情况正在发生:

  • 虽然有名称(names >0),然后执行此存根的内容
  • ......就是这样。你永远不会改名。
  • ......永远不会调用该函数。

也许你有意做这样的事情 - 这只是一个例子,完全假设你想要实现的目标。

$(document).ready(function(){
  var names = ['Hannah', 'Lucy', 'Brenda', 'Lauren', 'Mary'];
  var liked = [];
  var disliked = [];

  $('#yourLikeButton').click(function(){
    var name = $(this).data('name'); // on your button put data-name="Hannah"
    var idx = names.indexOf(name);
    liked.push(names[idx]); // this is if you're playing around with indexes
    names.splice(idx, 1); // this is if you're playing around with indexes
  });

  // similar for your dislike button      

 });