![](/img/trans.png)
[英]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.