関数スコープの周りに脳を包み込もうとしてしばらくの間Javascriptクロージャに苦労してきましたが、代わりにそれらが私の周りを包み込んでいると思います。私はいくつかの投稿を見てきましたが(Nymanのものが最も役に立ちました)、明らかにまだそれを取得していません。jQueryのhoverメソッドでループを実行しようとしています。それぞれ複数のアクションを最終的にトリガーするにはホバー関数が必要ですが、今のところ、それぞれ1つの画像スワップで機能させることができれば幸いです。
$(document).ready(function() {
imageSource = [];
imageSource[0] = 'images/img0.png' //load 0 position with "empty" png
imgArea = [];
for (var i=1; i<11; i++) {
(function( ){ //anonymous function for scope
imageSource[i] = 'images/img' + i + '.png';
imgArea[i] = '#areamap_Img' + i;
// running console.log here gives expected values for both
$(imgArea[i]).hover( //imgArea[i] (selector) works correctly here
function() {
$('#imgSwap').attr('src',imageSource[i]); // imageSource[i] is undefined here
},
function() {
$('#imgSwap').attr('src','images/img0.png');
});
})(); // end anonymous function and execute
}; // for loop
});
別のjQuery投稿からのスコープに無名関数を使用するというアイデアを試しました。正常に機能しているように見えますが、最初のホバー関数の配列値に未定義がスローされます。これは内部関数であるためだと思います(ハードコードされた画像ソースはそこで正しく機能します)。