2012-12-04 34 views
0

我已經用javascript構建了一個數組加載器。Javascript catchup 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]; 
       } 
      } 
     } 

}()); 

但沒有工作,有什麼建議嗎?

+4

爲什麼每個人都具有匿名函數返回匿名函數,這些天。如此瘋狂! – 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 = (count == wordArray.length - 1) ? 0 : count++; // increment 
count = (count == 0) ? wordArray.length - 1 : count--; // decrement 
0

的原因,它是不確定的,第一次是因爲沒有什麼wordArray在負的indeces。在您更新之前沒有「最後」的單詞。那有意義嗎?它在你點擊更新一次後就能正常工作。

+0

是的我知道,但我想趕上它,所以沒有任何反應,如果價值未定 – Johnny000

+0

看到這個問題:http://stackoverflow.com/questions/776950/javascript-undefined-undefined – thatidiotguy

+0

正如你可以看到上面我alredy嘗試'如果(typeof VARIABLE ==「undefined」)' – Johnny000