• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

메서드가 호출된 후에 정의되도 상관 없나요?

18.11.16 08:38 작성 조회수 98

1

안녕하세요. 좋은 강좌 잘 듣고 있습니다.

종종 메서드가 호출이 되고, 그다음 정의되는 부분이 있습니다.

예를들어 아래의 코드에서는

SearchModel.list(query).then(data =>{

this.onSearchResult(data)

})

부분에서 onSearchResult가 먼저 호출되고, 정의 되는 것은 코드의 마지막 부분입니다. 

  1. 이런식으로 사용해도 되는 이유가 export와 관계가 있는 건가요?
  2. 아니면 hosting과 관계가 있는 건가요?
  3. 이도 저도 아니라면 뭐때문에 가능한건지 알고 싶습니다.

export default {

init() {

FormView.setup(document.querySelector('form'))

.on('@submit', e => this.onSubmit(e.detail.input))

.on('@reset', e => this.onResetForm())

ResultView.setup(document.querySelector('#search-result'))

},

search(query){

//search api를 사용.

console.log(tag, 'search()', query);

SearchModel.list(query).then(data =>{

this.onSearchResult(data)

})

},

onSubmit(input){

console.log(tag, 'onSubmit()', input);

this.search(input)

},

onResetForm(){

console.log(tag, 'onResetForm()');

},

onSearchResult(data){

ResultView.render(data) //이 부분이 나중에 정의 되어도 상관 없는지?

}

}

답변 2

·

답변을 작성해보세요.

0

ryu sin님의 프로필

ryu sin

질문자

2018.11.16

질문이 좀 두서가 없었네요.

넵. 정확하게 보셨고, 답변 감사합니다.

0

질문 이해가 좀 어려운데요..

이게 맞나요?

"어떻게 search() 정의부에서 코드 아래에 위치한 onSearchResult()를 호출하는가?"

지금은 함수를 정의하는 부분이기 때문에 괜찮습니다.

브라우져가 이 코드를 해석한뒤 실행하는 시점에는

모든 함수의 위치가 확인된 상태기 때문에 호출할수 있는 것이죠.

확신할순 없지만 함수 호이스팅이지 않을까 생각합니다.