스코프의 정의
스코프(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