2012-12-04 2 views
0

자바 스크립트를 사용하여 배열 로더를 빌드했습니다. 내가 직접 마지막으로 클릭하면Javascript catch up undefined

Here the jsfiddle

, 나는 정의되지 않은 얻을. 나는 이런 식으로 따라 잡으려고 노력했다.

var lastWord = (function() { 

      return function() { 
      var resultWord = wordArray[--count % wordArray.length]; 
       if (typeof resultWord == "undefined") 
       { 
       return false; 
       } 
       else 
       { 
       return wordArray[--count % wordArray.length]; 
       } 
      } 
     } 

}()); 

그러나, 어떤 제안이 효과가 없었습니까? 음의 굴절률들에 wordArray 아무것도 없기 때문에

+4

같은 일을하고, count 결코 적절한 범위를 탈출하지 않도록하는 것입니다 왜 모든 사람들이 데 익명 함수는 요즘 익명 함수를 반환합니다. 너무 미쳤어! – thatidiotguy

+0

@thatidiotguy http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth –

+0

캡슐화 물건 –

답변

0

이 문제는 나머지 연산자에 의해 반환 된 기호는 첫 번째 피연산자의 부호 점이다 http://jsfiddle.net/ayQH2/2/

보십시오. 따라서, 예를

(-17) % 12 // == -5 , not 7 

이 아마 작동하고, 추가 기능 래퍼를 포함하지 않는 경우 :

var nextWord = function() { 
    // silly work-around for negative modulus issue 
    var index = (++count % wordArray.length) + wordArray.length 
    return wordArray[index % wordArray.length]; 
}; 
var lastWord = function() { 
    // silly work-around for negative modulus issue 
    var index = (--count % wordArray.length) + wordArray.length 
    return wordArray[index % wordArray.length]; 
}; 

이 처리 할 수있는 다른 방법의 많음이있다. 아마도 더 나은 사람이

count = (count == wordArray.length - 1) ? 0 : count++; // increment 
count = (count == 0) ? wordArray.length - 1 : count--; // decrement 
0

가 처음 정의되지 이유이다. 업데이트를 치기 전에 '마지막'단어가 없습니다. 말이 돼? 업데이트를 한 번 치면 제대로 작동합니다.

+0

그래 내가 알고,하지만 난 그것을 잡으려면, 그래서 아무것도 값이이 질문을 참조 – Johnny000

+0

정의되어 있지 않으면 발생하지 : http://stackoverflow.com/questions/776950/javascript-undefined-undefined – thatidiotguy

+0

당신이 (== "정의는"대해서 typeof VARIABLE)'Johnny187 @ – Johnny000