2012-03-01 2 views
1

누군가이 코드의 잘못된 점을 알려주시겠습니까? Chrome에서는 여전히 마우스 오버시 코드가 실행되지만 scrns[i]은 정의되지 않았습니다.배열에서 자바 스크립트 문제가 정의되지 않은 변수

function nextPrev() { 
    if (!document.getElementsByClassName) return false; 
    var scrns = document.getElementsByClassName('scrn'); 
    for (var i=0; i<=scrns.length; i++) { 
    // console.log(i); 
    scrns[i].onmouseover = function() { 
     // console.log('foo'); 
    } 
    } 
} 
window.onload = nextPrev(); 

for 루프가 작동하는지 테스트했으며 문제가 발생한 모든 부분에서 내가 어떻게 작동하는지 테스트 해 보았습니다. 언젠가 전에 책에서 가져온 예제를보고 심지어 scrns[i]이 정의되지 않은 이유를 이해할 수 없습니다.

도움을 주시면 큰 도움이됩니다.

+1

'window.onload = nextPrev();'(아마도)'window.onload = nextPrev;가되어야합니다. –

+2

또한 jQuery를 살펴볼 수도 있습니다. 귀하의 코드는 jQuery로 2 줄로 작성 될 수 있습니다. –

답변

5

. 하지만 배열은 0부터 시작하여 1부터 인덱싱되는 것을 기억하십시오. 따라서 10 개의 요소가있는 배열의 길이는 10이지만 요소는 0-9입니다. 다음 변경 :

for (var i=0; i<=scrns.length; i++) { 

에 :

for (var i=0; i < scrns.length; i++) { 
+1

나는 그 등가물이 어떻게 거기에 있고 심지어 그것을 보지 못했는지는 알지 못합니다, 긴 날! 고마워요 :) – frank

+0

@ frank 나는 그 시절을 너무했습니다. :) –

5

너무 멀리 반복하고 있습니다. i가 scrns.length과 같으면 배열 끝을 넘습니다. 당신의 정지 상태에서 =을 제거를 통해 반복 할 때 <=을 사용하고

for (var i=0; i < scrns.length; i++) { 
+0

그것은 오히려 "계속"입니다 - 조건 ... – mindandmedia

0

당신은 하나의 오류에 의해 떨어져 있습니다. <=에서 <으로 변경하면 문제가 해결됩니다. 나중에 루프 불변량을 사용하여 넘어 가지 않도록 할 수 있습니다. 어레이를 통해 반복 할 때 일반적

http://en.wikipedia.org/wiki/Loop_invariant

하지만, 너무 오래 카운터 어레이의 길이보다 작은 0 다음 루프로 반복하는 카운터를 시작한다.

관련 문제