클로져 특성 1

dev.dave·2023년 7월 29일

Javascript

목록 보기
121/167

클로져 특성 1>>>>>>>>>>

function hello(name) {
var _name = name;
return function() {
console.log('Hello, ' + _name);
};
}

var hello1 = hello('승민');
var hello2 = hello('현섭');
var hello3 = hello('유근');

hello1(); // 'Hello, 승민'
hello2(); // 'Hello, 현섭'
hello3(); // 'Hello, 유근'

이렇게 클로져가 있는데...

굳이 hello함수를 변수에 저장해서 호출하는 두가지 이유는?

  • 왜냐면, 그냥 함수를 hello('승민');
  • 이렇게 호출하게되면
  • 일단 헬로함수의 리턴이 익명함수이다
  • 그러 그냥 호출하면 저 리턴의 함수 자체가 리턴된다
  • 즉 , ƒ () {
  • console.log('Hello, ' + _name);
  • }

이렇게 함수 자체의 문자열? 이라해야하나
아무튼 저 함수의 자체가 리턴되므로 ,

이런 클로져 형태의 함수는

반듯시

호출할때 변수에 저장시켜서 해야하고,

그 두번째 이유는 중요한데!!!!

var hello3 = hello('유근');

hello1();

이렇게 호출을하는건
바로

hello()(); 이렇게 호출하는거랑 같다.

hello()(); 이코드는

  • hello함수가 외부 함수로 치면 ,
    리턴의 익명함수 가 내부함수로 치면,

즉, 외부함수호출, 내부함수호출을 한꺼번에 하는 호출법이다.
그렇게 해야 코드가 돌아가니까.
하나만 호출하면 아까처럼 저렇게 리턴이 저렇게 나오니까..

그리고 또,
hello()();
이 호출에서 앞에 괄호는 외부함수(hello함수)의 파라미터로 쓰는거고,
뒷부분괄호는 내부함수(리턴값 익명함수)의 파라미터로 쓴다.

그래서

일반적으로 변수로 저장해서 호출을 한다.
hello()(); 이렇게도 쓰지만,

var hello3 = hello('유근'); // 외부함수 호출 및 파라미터값 // 여기서 이미 외부함수가 호출이 된상태임!!!

hello1(); // 내부함수 호출 및 파라미터값(현재는 업네욯ㅎ;;)

이렇게 쓰는게 가독성이 더 낫다.

var hello3 = hello('유근'); 요 부분은 저기 설명 되 있듯이,
외부 함수를 호출을 한 상태이다, 그니까 함수가 실행이 된상태라는 뜻이죠, 실행된 상태를 변수에 저장하는거다.

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글