- 6
- 홀민
- 조회 수 709
제가 자바스크립트를 잘몰라서 원론적인 질문 하나 드립니다.
다음 지도 코드 작성중입니다.
daum.maps.event.addListener(map, 'dragend', function() { // 맵이 이동 되면 맵정보를 다시 읽어옵니다.
getInfo(); // 맵정보를 읽어옴
});
이런코드를 짜게 되었는데요.. 이유를 모릅니다.
function() 이 변수로 들어가있는데요.
getInfo()함수를 직접 넣으니 오류가 납니다.
function() 는 대체 먼가요?
함수 이름도 없고.....그냥 함수를 호출 하는데 그 함수는 {} 안의 함수다.
이런 뜻인가요?
만약 그렇다면 왜 함수를 직접 넣으면 오류가 나게 되나요?
자바스크립트는 함수를 변수로 취급 할수 있다고 알고 있는데.
함수는 저런식으로 넣어야 하는건지..
그냥 쓰기만 해서 ... 대체 왜 그런지 궁금하네요.
아시는 분 답변 부탁드립니다.
댓글 6
http://victorydntmd.tistory.com/
휴...너무 많은 글을 읽었습니다.
다 소화시키지도 못하겠지만. 읽다보니 계속 글을 타고 따라가게 되어서....
여튼 위에 페이지 좋네요.
답변 감사하고 배울것을 많이 알게 되었습니다.
말해주신 코드는 내일 한번 시도해보도록 할께요.
감사합니다.
정말 잘 동작하네요.
---
daum.maps.event.addListener(map, 'dragend', getInfo()) ;
이렇게 넣으면 동작하지 않으면서
daum.maps.event.addListener(map, 'dragend', getInfo) ;
이렇게하면 왜 동작하는걸까요...?
혹시 알려주실수 있으신가요?
이름만 넣으면 콜백함수로 되는거 같은데..
다시한번 감사합니다.
안녕하세요 대신답변하겠습니다.
이벤트리스너에서 이벤트가 발생될때 이벤트 함수가 실행 (Event())되게 됩니다.
한가지 예를 들어보죠
var Event = function(){
console.log("함수를 실행하셨습니다.");
}
Event라는 함수를 정의하였습니다.
이제 이 함수를 호출하려면 어떻게 해야할까요?
Event()
라는 코드를 실행해야합니다.
만약
Event
라는 코드만 쓰면 어떻게 될까요?
function(){
console.log("함수를 실행하셨습니다.");
}
브라우져는 이런 값을 반환합니다.
정의된 함수만을 보여주는 거죠..
이 함수를 실행시키려면
(function(){
console.log("함수를 실행하셨습니다.");
})();
이렇게 해야합니다. 괄호(실행자)가 붙어야하죠.
브라우져에 이런 코드를 넣어보세요
function(){
console.log("함수를 실행하셨습니다.");
}
이 함수는 실행되지 않습니다. 실행자가 없기 때문이죠.
이벤트 리스너는 미리 호출할 함수를 정의만 해두고 이벤트가 일어날때마다 정의된함수를 호출해줍니다.
익명함수에서 addEventListener을 사용하면 (function(){}) 이런 익명함수 이벤트가 실행 (function(){})() 되게 됩니다.
근데 X.addEventListener(x,evt,callback()) 이렇게 하게되면 이벤트가 발생될때 (function(){}())() 이런 요상한게 실행되면서 타입에러가 발생됩니다.
그러면 결론적으로 익명함수에서 함수를 호출하려면 함수 호출 () 를 생각한채 함수 이름만으로 호출해야된다는 말이되네요..
제대로 이해하려면 자바스크립트를 깊이 있게 공부해야되는군요.
설명 감사합니다.
네, 미리 함수를 정의만 해두어야 합니다.
감사합니다.
function() 의 경우에는 이름이 없는 익명함수입니다.
그리고 해당 구문에 대해서는 콜백 함수로 검색을 하시면 아실 수 있습니다.
참고로 아래와 같이 사용하시면 동일한 결과를 얻으실 수 있습니다.
daum.maps.event.addListener(map, 'dragend', getInfo);