호이스팅을 공부하다 함수표현식과 함수선언문을 공부하게 됐고, 자연스럽게 두 문법의 차이점을 공부하던중 궁금증이 생겼다.

함수 선언문과 var는 함수스코프를 가진다. 함수스코프는 함수블럭 안에서의 접근이 가능한 스코프를 말하는 것인데, var는 함수 스코프 이외에 for문이나 if문 { } 블록스코프 안에 var로 선언한 변수는 바깥에서도 사용이 가능하다.

// 블록스코프에 var가 접근

{
var a = 1
}

console.log(a) // 1

for(var i =0; i < 10; i++){
}
console.log(i) // 9

그렇다면 var는 블록스코프 안에서도 접근이 가능하다는 것이다.

그렇다면 함수 표현식은 블록스코프이기 때문에 함수 표현식 안에 선언한 var 변수도 접근이 가능할거라고 생각을 했다.

let add = function(){
	var a = 1;
}

console.log(a) // a is not defined

하지만 결과는 접근이 불가능 했다.

이해가 되지 않았다 var는 블록스코프에 접근이 가능한게 아니었나?...

그렇다면은 함수 표현식은 호이스팅의 영향을 받지 않는다 즉 , var가 블록스코프에 접근할 수 있는것은 호이스팅 때문이라고 생각하면 되는거 같은데