클로저와 범위를 이해하는 데 문제가 있습니다. 나는 뜻밖의 행동을 취하기 전까지 그것을 이해했다는 것을 확신했다.클로저와 범위 이해
function doSomething() {
// Code unrelated to frag
var rightDiv = document.createElement(rightDiv);
var img, i, frag = document.createDocumentFragment();
for (i = 0; i < photoIDs.length; i++){
img = new Image();
addClass(img, "popup-image-preview");
img.src = "photos/"+photoIDs[i]+".jpg";
frag.appendChild(img)
}
// add popup for preview
addEvent(rightDiv, "mouseover", function() {
showPopup(frag, this);
console.dir(frag);
});
// more code unrelated to frag
}
onmouseover 처리기가 여전히 이미지가 포함 된 DocumentFragment에 액세스 할 것으로 예상됩니다. 그러나 콘솔에서 볼 때 더 이상 자식이 없습니다. 이 특정 익명의 함수가 에 대한 로컬 변수의 값에 액세스 할 수 없다는 것인가?doSomething doSomething에 대한 후속 호출은 이전 실행의 종료에 영향을 미칩니 까? 후자는 doSomething에 대한 후속 호출에 frag이 비어있을 수 있으므로 내 상황을 이해할 수있게합니다.
저는 폐쇄가 예상대로 작동해야한다고 생각합니다. 기묘한. –
AFAIK, 귀하의 가정이 맞습니다. 이것은 다른 이유가 있어야합니다. 그렇지 않으면 어떤 구석 구석에 충돌합니다 ... –
'doSomething'을 다시 호출하고 이벤트를 다시 바인딩했기 때문에 그것이 그럴지 궁금합니다. 이것이 오래된 이벤트 바인딩을 버릴 것인지 확신하지 못한다. (브라우저에서 JS를 잘 모른다.) –