[英]Why var variable in javascript become global when used in for loop?
[英]javascript var alerts but when used is undefined
真奇怪 看一下这个:
for( var i = 0; i <= videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
有3个视频。 在FF中,此警报会警告所有3个视频ID,并提示未定义video [i]。 一点都不知道。
摆脱for
循环条件中的=
。
for( var i = 0; i < videos.length; i ++ ){
...
}
使用<=
,您要遍历索引,该索引比Array
的实际索引值大一个,因此您遍历了返回undefined
的无效索引。
例如...
如果您有array('A','B','C')
,则长度为3
。 现在,如果迭代到3 <= i
,并且包含0
,因为数组以Javascript开头,那么实际上将循环4次,而不是3次。
A
的索引值为0
,而不是1
,因此您需要在i
等于长度之前停止,直到i
等于长度之前不要继续,因为0
索引实际上已添加到循环的总长度中,这意味着3 + 1。 该数组上的4个循环太多了,因此<
和不是<=
。 您想在4之前停止,而不是在4之后停止,而是在5之前停止。
另外,缓存Array
的长度通常是个好习惯,因为某些浏览器不会对其进行优化。
由于您正在执行i <= videos.length
,因此您正在读取i <= videos.length
数组末尾的videos
。 Javascript数组的索引为零,因此通常需要迭代长度-1。
相反,请尝试:
for( var i = 0; i < videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
在for循环中将“ <=”更改为“ <”。 它应该解决问题。
问题在于,阵列中只有三个项目。 首先以0寻址第一项。这意味着2是最后一个有效索引。 当代码尝试访问索引3时,它将失败。 (当alert(...)尝试访问不存在的第4个元素(位置3)时,该故障点将是循环的第4次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.