2016-10-15 2 views
0

죄송합니다. 제목이 정확하지 않은 경우 죄송합니다. 그 제목을 정확히 설명하지 못했습니다. 나는 다양한 다른 튜토리얼을 사용하여 함께 결합 된 js 비트를 가지고있다. 작동하지만 어떻게 작동하는지/조금 더 이해할 수 있기를 바랬습니다.JavaScript 닫힘 함수가 이벤트 수신기에 전달

코드는 이미지가 가득한 페이지의 모달을위한 것으로, 이미지를 클릭하면 이미지가있는 모달이 시작됩니다.

function modal(modalId, modalImg) { 
    var image = document.getElementsByClassName('modalImg'); 
    var imageLength = image.length; 
    var myModal = document.getElementById(modalId); 
    var modalImg = document.getElementById(modalImg); 
    for (var i = 0; i < imageLength; i++) { 
    (function(index) { 
     image[i].onclick = function() { 
     myModal.style.display = "block"; 
     modalImg.src = this.src; 
     imgIndex = index; 
     } 
    })(i); 
    } 
} 

당신은이 코드가 작동 (전체 맥락에서) 볼 수 있습니다 here : 여기에 코드의 관련 부분이다.

여기서 이해하려고하는 부분은 클로저 기능과 이벤트 리스너입니다. 따라서 closure 함수가 호출되고 i (for 루프의 카운터)이 index 인수로 전달됩니다. 내 질문은, 도대체가 i 클릭 된 이미지의 인덱스로 설정되는 방법은 무엇입니까?

+0

나는 내 대답을했다. 명확하지 않은 것을 확인하고 주석에 언급하십시오. 나는 분명히 할 것이다. –

+0

클로저가 이것을 피하기 위해 사용됩니다. http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue –

답변

2

우리가이 코드를 보면 : 모든 이미지를 통해

(function(index) { 
    image[i].onclick = function() { 
    myModal.style.display = "block"; 
    modalImg.src = this.src; 

    // `index` here is a variable accessible through closure scope 
    imgIndex = index; 
    } 
})(i); 

코드의 반복을 다음 click 콜백 내부 closure으로 캡처됩니다 i 변수, 각 이미지 인덱스를 전달합니다.

+0

알았어. 제대로 이해하면 _italic_every_italic_ 이미지의 색인이 클로저로 전달됩니다. 함수를 호출하면 .onclick은 개별 이미지의 적절한 색인을 캡처하여 'this'가됩니까? – Tyler

+0

@ 타일러, 한 주석에 너무 많은 것들. '(functoin (index) ..)()'는 클로저 함수가 아니며 [IIEF] (http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript)입니다. 'onclick' 콜백은 클로저에서'index' 변수를 포착합니다. 이 콜백에서'this'는'DOM'요소를 가리 킵니다 –

+0

Maximus : IIFE는 반드시 사용해야하는 공식적인 용어가 아닙니다. –

관련 문제