重複の可能性:
JavaScript クロージャーはどのように機能しますか?
FAQ を検索し、例を見てきましたが、これが機能しない理由を理解できないようです。私が間違っていることについてのヒントをいただければ幸いです。私がやろうとしているのは、単語を取り、ボタンをクリックすると、文字ごとに一度に1つずつ画像を表示し、単語を綴ることです(画像はフェードイン/フェードアウトする必要があります)。これは古典的な「for ループが最後の項目のみを表示する」問題ですが、問題は、コンソールが正しくログを記録することです。変数は変更されますが、最後の画像のみが表示されます。繰り返しますが、これを完全に理解することが重要であることを知っているので、私が間違っていることを理解する助けに本当に感謝しています. 以下のコード (更新されるのは div とボタンだけなので、HTML は省略しました):
$(document).ready(function () {
var word = 'abc';
$('#newWordButton').click(function () {
function animateLetters() {
function changeLetter() {
for (i = 0; i < word.length; i++) {
var currentLetter = word.charAt(i);
console.log(currentLetter);
$('#wordsDiv').fadeOut(1000, function () {
$('#wordsDiv').replaceWith('<img src = "images/letters/' + currentLetter + '.gif" />');
$('#wordsDiv').fadeIn(1000);
});
}
}
setTimeout(changeLetter, 1000);
}
animateLetters();
});
});