: 전역 객체와 중첩된 함수의 스코프의 레퍼런스를 차례로 저장하고, 의미 그대로 각각의 스코프(범위)가 어떻게 연결(chain)되고 있는지 보여주는 것
쉽게 말하자면, 작성한 함수가 실행되는 과정에서 해당 함수 범위(scope) 내에 요청한 변수의 값을 찾을 수 없다면 선언된 함수 중 가장 가까운 위치의 변수를 찾아서 값을 반영한다.
코드로 비교해서 간단히 보자면
// 같은 변수 A라도 number함수 내의 A 반영.
const A = 123;
function number(alpha){
const A = 456;
if(alpha === A){
return A.toString()
} else{
return alpha
}
}
number(456) //결과 : "456" (문자)
number 함수 내 변수 'A'의 값 456과 제시된 'alpha'의 값이 456으로 동일하기 때문에 A.toString()의 메서드를 받아 결과값으로 문자열 "456"이 도출된다.
//number 함수 내에 변수 A에 대한 값이 없지만 함수 근처에 동일한 변수 A의 값을 반영
const A = 123;
function number(alpha){
const b = 456;
if(alpha === A){
return A.toString()
} else{
return alpha
}
}
number(456) // 결과 : ⭐️ 456(숫자)
number 함수 내 제시된 변수 'A'를 확인할 수 없기 때문에 스코프 체인으로 근처의 동일한 이름의 'A' 변수값을 반영한다.
A값 123과 'alpha'값 456이 다르기 때문에 alpha값을 결과로 도출, 숫자 456이 결과값이 된다.