클로져 특성 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함수를 변수에 저장해서 호출하는 두가지 이유는?
console.log('Hello, ' + _name);이렇게 함수 자체의 문자열? 이라해야하나
아무튼 저 함수의 자체가 리턴되므로 ,
이런 클로져 형태의 함수는
반듯시
호출할때 변수에 저장시켜서 해야하고,
그 두번째 이유는 중요한데!!!!
var hello3 = hello('유근');
hello1();
이렇게 호출을하는건
바로
hello()(); 이렇게 호출하는거랑 같다.
hello()(); 이코드는
즉, 외부함수호출, 내부함수호출을 한꺼번에 하는 호출법이다.
그렇게 해야 코드가 돌아가니까.
하나만 호출하면 아까처럼 저렇게 리턴이 저렇게 나오니까..
그리고 또,
hello()();
이 호출에서 앞에 괄호는 외부함수(hello함수)의 파라미터로 쓰는거고,
뒷부분괄호는 내부함수(리턴값 익명함수)의 파라미터로 쓴다.
그래서
일반적으로 변수로 저장해서 호출을 한다.
hello()(); 이렇게도 쓰지만,
var hello3 = hello('유근'); // 외부함수 호출 및 파라미터값 // 여기서 이미 외부함수가 호출이 된상태임!!!
hello1(); // 내부함수 호출 및 파라미터값(현재는 업네욯ㅎ;;)
이렇게 쓰는게 가독성이 더 낫다.
var hello3 = hello('유근'); 요 부분은 저기 설명 되 있듯이,
외부 함수를 호출을 한 상태이다, 그니까 함수가 실행이 된상태라는 뜻이죠, 실행된 상태를 변수에 저장하는거다.