var foo = true;
if(foo){
{
let bar = foo * 2;
}
console.log(bar);
}
VM306:6 Uncaught ReferenceError: bar is not defined
at <anonymous>:6:13
------------------------------
function fbScope() {
const abc = 'abc';
const t = true;
if (t) {
{
console.log('inside if block');
var v = 1;
const x = 3;
console.log(v, x, abc); // << 여기서 abc 왜출력되는거임?
}
} else {
const bbb = "bbb"
}
}
fbScope();
abc 왜출력되는거임?
1번은 에러나는데..??
왜 2번은 됨?
스코프 상위검색 아래 되는 이유가 함수스코프안에 블록스코프 있어서 맞아?
왜안돼?
{} 안쪽에 있는 것들은 바깥쪽에 있는 변수들에 접근 가능함
let, const는 {} 스코프라 {} 안쪽에 선언된 것들은 바깥쪽에서 접근 못함
이게 맞네 ㄳ
var foo = true;if(foo){ { let bar = foo * 2; {console.log(bar);}}}VM36:10 2님 말 맞음 ㄳ
대부분의 언어가 바깥쪽에서 안쪽에 접근하는건 불가능하고 안쪽에서 바깥쪽으로 접근은 가능함
이게 맞군 안쪽에서 바깥쪽으로만 접근 가능하는거 ㄳ
var foo = true;if(foo){ { let bar = foo * 2; {console.log(bar);}}}VM36:10 2 ㄳ 맞음
let, const는 블록스코프, 함수스코프 둘 다 센서티브고, var는 함수스코프에만 센서티브함. 1번은 bar가 블록안에서 선언됬으니까 접근을못하지
센서티브가 뭔지 알려줄 수 있을까
1번 bar를 let대신 var로해봐. 작동할걸? var는 함수안에서 선언하면 밖에서 못부르는데, 블럭안에서 선언한건 밖에서도 부를수있어. 그래서 쓰지말란거. 블록은 함수제외한 모근 중괄호 얘기하는거임. if포함