why?

Javascript_Question(1) : 함수의 출력

Ama_grammer 2023. 6. 22. 16:11

function one() {
return function two() {
      console.log("one function return two function");
   }
}
const test = one();

 

one() 함수는 two를 return 하는 함수이다.

그런데, one() 이라는 함수를 바로 사용하면

 

 

다음과 같이 two 를 실행하여 

 

console.log("one function return two function");

 

이 동작이 리턴되어 실행되는 것이 아닌 two() 함수 자체를 리턴하여 출력되는 모습을 볼 수 있다.

 

그런데, one() 함수를 그냥 사용하지 않고 

const test = one();

으로 저장하여 test(); 를 입력하면 two의 함수가 아닌 two 함수가 실행된 결과 값이 리턴되는 모습이다.

test 변수에 저장된 함수를 사용하는 것과

함수의 이름을 그냥 바로 사용하는 것의 차이는??

왜... 그런걸까?

 

*** 해결 ***

closure 를 학습한 후 알게된 내용.

one() 을 호출 하면 one 함수 내부의 two 함수가 반환되는데 이 값은 결과값이 아닌 함수 그 자체이다.

하지만, one 을 그냥 호출하지 않고

const test = one();

 

test 에 할당하고 test() 를 호출 하면 클로저를 통해 one() 함수가 반환한 two() 함수가 test 에 저장되고, test() 를 호출 하면 two() 함수가 실행된다. 이는 two 함수가 one 함수의 렉시컬 환경을 기억하고 있기 때문이다.

'why?' 카테고리의 다른 글

Javascript_Question(2): reduce함수  (3) 2023.06.26