10. 강제변환
주요 개념 및 내용
클로저란 내부 함수의 스코프가 아직 죽지 않고 살아있는 상태!
즉 외부에서 내부를 호출 할 수 있음! 왜냐 안죽었으니깐... 난무적이다.
모듈화의 근간이 되는 개념
외부에서 내부함수를 호출 -> 즉 조건은 외부에서 내부의 참조값을 들고 있으면 그 스코프가 사라지지 않음 -> 이게 핵심
쿨로저는 객체든 원시값이든 외부에서 내부를 참조하고 있으면 성립된다. -> 토론 1,2
스코프가 사라지지 않는 이유
// 핵심개념
// 1번째
function foo() {
var a = 2;
function bar() {
console.log(a); // 2
}
return bar; // 함수 자체 반환
}
var bar = foo(); // function bar(){...}
// foo의 내부 함수 실행 (함수반환)
// 사라지지 않는 이유 -> bar가 반환된 후 스코프를 잡고 있어서 (클로저 핵심)
bar(); // 클로저 -> foo 스코프가 살아 있는 상태 -> a 값을 세팅하는 이유
// 2번째
function foo2() {
var a = 3;
function baz() {
console.log(a); // 3
}
bar2(baz);
}
function bar2(fn) {
// 최종적으로 여기서 fn(baz)가 실행됨
// baz 는 foo2의 내부함수! 클로저 -> foo2의 스코프를 잡고 있음 foo2의 gc가 안이루어짐
fn(); // 클로저
}
foo2(); // 3
// 3번째
console.log("클로저 3번째 내용");
var fn3;
function foo3() {
var a = 4;
function baz3() {
console.log(a);
}
fn3 = baz3;
}
function bar3() {
fn3(); // 클로저 : 여기서 fn3 = baz3 (foo3 내부함수 참조함)
}
foo3(); // 이거주석하면 (TypeError: fn3 is not a function) -> 이유는 fn3 할당이안되서!
bar3();토론
해결책 2번 참고
테스트 코드
Last updated
Was this helpful?