質問: Math.floor(Math.random()*setElm.length); $(setElm[randomSet]).css({visibility:'visible',opacity:'0'}).animate({opacity:'1'},1000); を変数randomSetを使わずに $(setElm[Math.floor(Math.random()*setElm.length)]).css({visibility:'visible',opacity:'0'}).animate({opacity:'1'},1000); と書いたときということです。
回答: > > 全ての画像が表示されないのですが > > > とりあえず、Firefox / Chrome で再現しません。 > > 関数 random のスコープ内で宣言するとランダム表示が延々と続くのですが > > > `setElm` を `setElm.splice(randomSet,1);` で個数を減らすことで順に処理しているのに、`random()` の頭で `$('.load > ul > li');` を代入することで個数が戻るからです。 現在書かれている方法: 1. `random()` の前に `li` を `setElm` に代入 2. `random()` 実行 1回目:ランダムに `li` を取り出し処理。`setElm` から1つ削除(残り2つ) 3. `random()` 実行 2回目:ランダムに `li` を取り出し処理。`setElm` から1つ削除(残り1つ) 4. `random()` 実行 3回目:ランダムに `li` を取り出し処理。`setElm` から1つ削除、残りが無いので終了 スコープ内で代入: 1. `random()` の前に `li` を `setElm` に代入 2. `random()` 実行 1回目: `li` を `setElm` に代入。ランダムに `li` を取り出し処理。`setElm` から1つ削除(残り2つ) 3. `random()` 実行 2回目: `li` を `setElm` に代入。ランダムに `li` を取り出し処理。`setElm` から1つ削除(残り2つ) 4. `random()` 実行 3回目: `li` を `setElm` に代入。ランダムに `li` を取り出し処理。`setElm` から1つ削除(残り2つ) ......(無限に続く) かえってわかりにくいですかね。