function getResult() {
let result = 10;
return result;
}
// 자바스크립트 에러!
// getResult 내부의 scope에 접근할 수 없다
console.log(result);
const color = 'red';
console.log(color); //red
function returnColor() {
console.log(color); //red
return color;
}
console.log(returnColor()); //red
const satellite = 'The Moon';
const galaxy = 'The Milky Way';
let stars = 'North Star'; //글로벌 변수 선언
const callMyNightSky = () => {
stars = 'Sirius'; //let 키워드를 작성하지 않고 새로운 변수 선언
return 'Night Sky: ' + satellite + ', ' + stars + ', ' + galaxy;
};
console.log(callMyNightSky()); //"Sirius"
console.log(stars); //"Sirius" => 다른 함수에서 global 변수(North Star) 사용 불가능
global 변수의 남용을 막기 위해 변수들은 block scope으로 나누고, block 변수는 항상 다른 이름으로 선언한다.
function whatIs(type) {
let description;
switch (type) {
case 'scope':
description = '변수를 사용할 수 있는 범위';
break;
case 'block':
description = '중괄호({})로 감싸 해당 구역에서만 사용되는 로컬 변수를 만듦';
break;
case 'global scope':
description = '코드 어디에서나 변수에 대한 접근 및 사용이 가능한 공간 ';
break;
case 'global variable':
description = 'block밖인 global scope에서 만든 변수';
break;
case 'block scope':
description = '변수에 대한 사용 및 접근이 해당 blcok 내로 제한된 범위';
break;
case 'local variable':
description = 'block안에 선언된 변수로 해당 block 안에서만 사용 가능';
break;
case 'global namespace':
description = 'global 변수 선언시 어디에서나 사용할 수 있는 변수범위(이름)';
break;
case 'scope pollution':
description = 'global 변수의 남용시 발생할 수 있는 문제';
break;
default :
description = ''
break;
}
return description;
}