잠깐 동안 자바 스크립트 클로저로 고생해서 함수 스코프 주위에서 두뇌를 감싸려고했지만 대신 내 주변을 감싸고 있다고 생각합니다. 나는 많은 게시물을 보았습니다. (Nyman이 가장 도움이되었습니다.) 그러나 분명히 여전히 그것을 얻지 못합니다. jQuery에서 호버 메서드를 통해 루프를 실행하려고합니다. 호버 기능을 궁극적으로 한 번 이상 하나의 작업을 트리거 할 필요가 있지만 각각 단일 이미지 스왑으로 작업하게해야합니다.jQuery, 호버 메소드 및 클로저
$(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 게시물에서 범위 지정을 위해 익명의 함수를 사용하는 방법을 시도했습니다. OK로 작동하지만 첫 번째 호버 기능에서 배열 값에 대해 정의되지 않은 값을 던졌습니다. 하드 코딩 된 이미지 소스가 올바르게 작동하기 때문에 내부 함수이기 때문입니다.
고마워요 !! 나는이 것들이 반복하기가 얼마나 어려운지 이해하고있다. 이것은 매우 도움이되는 설명이다. – boomturn
EXCELLENT 설명, 특히 "var index = i;"의 핵심 주석. 이 애매한 것들을 좀 더 이해했습니다! – Isaac