JavaScript에서의 스코프는 "변수의 유효범위"로 사용
변수에 접근할 수 있는 범위가 존재합니다. 중괄호(블록) 안쪽에 변수가 선언되었는가, 바깥쪽에 변수가 선언되었는가가 중요
코프는 "변수 접근 규칙에 따른 유효 범위"입니다.
var 키워드로 정의한 변수는 블록 스코프를 무시하고, 함수 스코프만 따릅니다. 그러나, 모든 블록 스코프를 무시하는 건 아닙니다. 화살표 함수의 블록 스코프는 무시하지 않습니다.
함수 스코프는 함수의 실행부터 종료까지이고, var 선언은 함수 스코프의 최상단에 선언됩니다. 선언 키워드 없는 선언은 최고 스코프에 선언됩니다.
let 키워드는 재선언을 방지합니다.
const 키워드는 변하지 않는 값, 곧 상수(constant)를 정의할 때에는 const를 이용, 값의 재할당이 불가능합니다.
⇒ let, const와 var의 차이점은 무엇보다 유효범위에 있다
"함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.”
⇒ 외부 함수의 변수에 접근할 수 있는 내부 함수
const adder = function (x) { ← 외부 함수의 변수 x , 외부 함수
retrun function (y) { ← 내부 함수의 변수 y , 내부 함수
retrun x + y;
retrun function (y) { ← 내부 함수의 변수 y , 내부 함수
retrun x + y;
}
}
⇒ 내부 함수는 외부 함수에 선언된 변수에 접근 가능하다
const adder = function (x) {
retrun function (y) {
retrun x + y;
}
}
const add5 = adder ( 5 );
← 함수 실행이 끝나도 값은 사용가능
외부 함수의 실행이 끝나더라도, 외부 함수 내 변수(x)를 사용할 수 있다.
구조 분해 할당은 spread 문법을 이용하여 값을 해체한 후, 개별 값을 변수에 새로 할당하는 과정을 말합니다.
const [a, b, ...rest] = [10, 20, 30, 40, 50];
// a, b, rest > 10 , 20 , [30, 40, 50]
const
, let
, var
)과 함께 사용하지 않으면 에러가 발생할 수 있습니다.const {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
// a, b, rest > 10 , 20 , {c: 30, d: 40}
function whois({displayName: displayName, fullName: {firstName: name}}){
console.log(displayName + " is " + name);
}
let user = {
id: 42,
displayName: "jdoe",
fullName: {
firstName: "John",
lastName: "Doe"
}
};
whois(user) // jdoe is John