number
string
boolean
null
undefined
같은 고정된 저장공간을 차지하는 데이터변수에 접근할 수 있는 범위.
중괄호(블록) 안쪽에 변수가 선언되었는지, 바깥쪽에 선언되었는지가 중요하며 이 범위를 스코프라고 부름
ex1)
let name = '김코딩';
function. showName() {
let name = '박해커'; // 지역 변수
console.log(name); // 지역 변수의 영향을 받아 '박해커 출력'
}
console.log(name); // 전역 변수 스코프이므로 '김코딩' 출력
showName();
console.log(name); // 여전히 전역 변수 스코프이므로 '김코딩'출력.. 안쪽 스코프로는 접근이 불가
ex2)
let name = '김코딩';
function. showName() {
name = '박해커'; // 변수 선언없이 그냥 name에 값 할당
console.log(name); // '박해커 출력'
}
console.log(name); // 전역 변수 스코프이므로 '김코딩' 출력
showName();
console.log(name); // showName함수 실행 후에는 전역변수 name의 이름이 바뀌기 때문에 '박해커'출력
for (let i = 1; i < 5; i++) {
console.log(i);
}
console.log('final i:', i); // ReferenceError : for문을 벗어났기 떄문에
for (**var** i = 1; i < 5; i++) {
console.log(i);
}
console.log('final i:', i); // 5: var 키워드를 사용했기 때문
let
키워드 사용이 권장됨var
키워드는 재선언을 해도 에러가 나지 않지만 let
키워드는 재선언을 방지함let
과 동일하게 블록 스코프를 따름const
사용을 권장함let
const
로 선언하면 Script로 들어감Local < Script < Global
let x = 10;
function outer () {
x = 20;
function inner () {
let x
x = x + 20;
return x;
}
inner();
}
outer();
let result = x;
let seenYet = function() {
let archive = {name: 'kimcoding', age: 28};
return function(val) {
if (archive[val]) {
return true;
}
archive[val] = true;
return false;
}
}