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

标签 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 循环继续,直到数组名称为空。 然后,我让用户每次都用数组中的名字替换文本。 然后,我要么选择喜欢/不喜欢,然后删除数组的第一个名称并重复该过程,直到名称数组为空。

但是,当我在浏览器中加载时,它不会加载页面,因为我认为它陷入了循环

最佳答案

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

名称的所有处理都是在函数function likeOrDislike()内完成的,并且您永远不会调用它。

所以这正在发生:

  • 如果有名称 (names >0),则执行此 stub 的内容
  • ...就是这样。你永远不会改变名字。
  • ...该函数从未被调用。

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

$(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      

 });

关于javascript - 为什么这段代码会执行无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704973/

相关文章:

javascript - Ajax Json 请求不工作

javascript - 如何让私有(private)方法在 TypeScript 中工作?

javascript - 这个 HTML 代码是什么意思?

c - C 中 fgets 和 strtok 的问题

arrays - 如何删除数组的前五个元素?

php - 我循环中的数据不匹配,不知道为什么

javascript - 使用 AJAX 在 Flask 和 JS 之间发送数据以进行 chrome 扩展

arrays - CakePHP函数将点分数组转换为多维

linux - 仅使用 bash 脚本陷阱提取文件 5 次

loops - 在 ARM 汇编中创建嵌套 If 语句