scope란 범위, 유효공간, 허용공간을 뜻한다.
그렇다면 함수스코프란 무엇인가?
함수스코프란 함수에 의해서 생기는 범위를 말한다.
ES5까지는 변수의 유효범위가 함수에 의해서만 발생할 수 있었다.
그러나 ES6로 넘어오면서 블락스코프(Block Scope)란게 탄생하였다.
그렇다면 블락스코프(Block Scope)란 무엇일까?
함수스코프가 함수에 의해 생기는 범위인것처럼 블락스코프는 블락에 의해 생기는 유효범위를 말한다.
그럼 블락이 무엇일까?
{
let a = 10
{
let a = 20
//#1
console.log(a)
}
//#2
console.log(a)
}
//#3
console.log(a)
여기서 {} 중괄호 이것을 블락이라 부른다.
즉, { }에 의해서 변수의 유효범위가 결정된다.
각각 #1,2,3의 출력결과는 어떨까?
위의 사항을 함수로 표현하면 아래와 같다.
(function one () {
var a = 10;
(function two () {
var a = 20;
//#1
console.log(a);
})();
//#2
console.log(a);
})();
//#3
console.log(a);
#1은 함수two에 속해있다. 그러므로 함수 two안에서 a의 값을 찾으려 할 것이다. 그러므로 a=20이 출력된다.
#2는 함수one에 속해있다. 그러므로 함수 one안에 서 a의 값을 우선으로 찾는다. 그러므로 a=10을 출력한다.
#3은 어느 함수에도 속하지 못한다. 스코프체인에 의해서 현재 위치보다 더 밑에 있는 값은 찾을 수 없다. 그러므로 a는 undefined를 출력한다.
스코프체인에 대한 자료:https://velog.io/@minho100227/실행-컨텍스트Execution-Context