为什么这些代码在我不在for循环中使用var theLength时会崩溃?为什么我需要将x.length分配给var theLength并在for循环中使用它以使其工作?谢谢, *我的问题没有错,请暂停我的问题。有人正在努力学习。
<html>
<head>
<script>
window.onload= test;
function test(){
var x=document.getElementsByTagName('*');
var theLength=x.length;
for(var i=0; i<x.length; i++){ // this i<x.length won't work
// But it will work with i<theLength
document.write("Hello World!<br>");
}
}
</script>
</head>
<body>
</body>
</html>
答案 0 :(得分:3)
这两种情况都有效。但是当你指定
时var theLength=x.length;
整个循环都是常数。在每个文档写入后使用x.length时,值增加1。所以循环是无止境的。
答案 1 :(得分:2)
举个例子:
x = document.getElementsByTagName('*'); // x.length = 5
theLength = x.length; // theLength = 5
for(var i = 0; i < x.length; i++) {
document.write('hello');
// after the first write(), x.length = 1
// JavaScript is now confused of the new x.length value
}
发生错误是因为您要通过写入文档来更改x.length
的值。 x的值每次都会不断变化,JavaScript足够聪明,可以检测和禁止。
它与theLength = x.length
一起使用,因为theLength
是常量。
答案 2 :(得分:1)
它不起作用,因为当你在for循环中有x.length时 - 随着你不断添加新的dom元素,它的值会不断增加。在“theLength”变量中设置for循环之前的值时,它的固定值为4.
所以这绝对不是一回事。如果你在for循环中记录x.length的值,你会看到它的值随循环的每次迭代而增加 - 所以你创建了一个无限循环!
window.onload= test;
function test(){
var x=document.getElementsByTagName('*');
var theLength=x.length;
for(var i=0; i<x.length; i++){
console.log(" x.length: " + x.length);
document.write("Hello World!<br>");
}
}
答案 3 :(得分:0)
这是因为通过将<br>
标记写入文档,您将添加新标记。所以x
在你进入循环时长度增加,因此是一个无限循环。
您可以在控制台中尝试:
var x=document.getElementsByTagName('*');
x.length
document.write("Hello World!<br>")
x.length // will increase
document.write("Hello World!")
x.length // will stay the same
在您进入循环之前指定var theLength = x.length
,无论您是否添加其他标记,theLength
都保持不变。因此行为上的差异。