10. 강제변환
주요 개념 및 내용
스코프가 사라지지 않는 이유
// 핵심개념
// 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