스코프의 정의
스코프(Scope)는 변수 접근 규칙에 따른 유효 범위를 뜻한다.
안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만, 반대로는 불가능하다.
스코프는 중첩이 가능하다.

가장 바깥의 스코프는 전역 스코프 (Global scope) 라고 부른다.
지역 스코프(Local scope) 이다.지역 변수는 전역 변수보다 더 높은 순위를 가진다.
let name = '김코딩'; // 전역 변수
function showName() {
let name = '박해커'; // 지역 변수
}
블록 스코프 는 중괄호 기준으로 범위가 구분된다.
// 예제 1
if (true) {
console.log('I am in the block');
}
// 예제 2
for (let i = 0; i < 10; i++) {
// 변수 i는 중괄호 안에서만 사용할 수 있다.
console.log(i);
}
// 예제 3
{
console.log('It works');
}
function 키워드가 등장하는 함수 선언식 및 함수 표현식은 함수 스코프 를 만든다.
function getName (user) {
return user.name;
}
let getAge = function (user) {
return user.age;
}
let getAge = user => {
return user.age;
}
같은 함수여도, 화살표 함수를 사용하면 블록 스코프 로 취급된다.
let getAge = function (user) {
return user.age;
}
function 키워드를 사용하면 함수 스코프 이며, 이 부분은 화살표 함수와 일반 함수의 가장 큰 차이점이다.
var 키워드는 블록 스코프를 무시하고, 함수 스코프만 따른다. (이전 방식)let 키워드 사용이 권장된다.let 으로 선언된 변수의 접근 범위를 제한한다.const 사용이 권장된다.TypeError 를 낸다.| let | var | const | |
|---|---|---|---|
| 유효 범위 | 블록 스코프 및 함수 스코프 | 블록 스코프 및 함수 스코프 | 함수 스코프 |
| 값 재할당 | 가능 | 불가능 | 가능 |
| 재선언 | 불가능 | 불가능 | 가능 |
var로 선언된 전역 변수 및 전역 함수는 window 객체에 속하게 된다.
window 라는 객체가 존재한다.var myName = '김코딩';
console.log(window.myName); // 김코딩
function foo() {
console.log('bar');
}
console.log(foo === window.foo); // true
전역 변수 는 어디서든 접근 가능한 변수다.
선언 키워드(ver, let, const) 없이 변수를 할당하면 안된다. 선언 없이 변수를 할당하면, 해당 변수는 var 로 선언한 전역 변수처럼 취급된다.
function showAge() {
age = 90;
console.log(age); // 90
}
showAge();
console.log(age); // 90
console.log(window.age); // 90
실수를 방지하기 위해 Strict Mode 를 사용할 수 있다. Strict Mode 는 브라우저가 보다 엄격하게 작동하도록 만들어 준다. "선언 없는 변수 할당"의 경우도 Strict Mode는 에러로 판단한다.
Strict Mode를 적용하려면, js 파일 상단에 'use strict' 라고 입력하면 된다.
'use strict';
function showAge() {
age = 90; // 여기서 error 발생
console.log(age); // 90
}
showAge();
Reference