javascript无限循环

这里有一段代码:

var alldivs = document.getElementsByTagName('div'),
len = alldivs.length;
for(var i = 0; i < len; i++) {
    document.body.appendChild(document.createElement('div'));
}

为什么会造成无限循环?
初始化变量alldivs时,页面中的div元素已经保存到alldivs这个变量中,循环执行前变量len也已经被初始化了。执行的循环仅仅是创建div元素,并没有重新初始化len,为什么会造成无限循环呢?

阅读 4.7k
3 个回答

来,给你制造一段会无限循环的代码:

唯一的不同是 判断循环的时候使用的是 alldivs.length ,而不是你拿出来的len.

唯二的不同是,你要保证你的body中存在div,否则alldivs.length是0,不会触发for循环

你已经声明并复制 len了,所以是不会变的,len是固定的.

alldivs.lengt 则根据div数量变化

<body>
    <div></div>
</body>
<script>
    var alldivs = document.getElementsByTagName('div'),
        len = alldivs.length;
    for (var i = 0; i <alldivs.length; i++) {
        document.body.appendChild(document.createElement('div'));
    }
</script>

你说得挺对的呀,不会造成无限循环……?

题主你给出的代码不会造成无限循环,我写了测试代码跑了一遍

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <script type="text/javascript">
    window.onload = function() {
      var div = document.getElementsByTagName('div');
      var length = div.length;

      for (var i = 0; i <= length; i++) {
        document.body.appendChild(document.createElement('div'));
      }
    }

  </script>
  <title>Document</title>
</head>
<body>
</body>
</html>

结果是没有报错,而且只生成了一个div

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题