스코프(Scope)
자바스크립트에서 스코프(Scope)란 어떤 변수들에 접근할 수 있는지를 정의한다.
스코프는 전역 스코프와 지역 스코프, 두 가지로 나뉜다.
전역 스코프
전역 스코프는 변수가 함수 바깥이나{}바깥에서 선언되었다면, 전역 스코프에 정의된다.
|
const globalVariable = 'variable'
|
cs |
위와같이 전역 변수를 선언한다면 코드 모든 곳에서globalVariable이라는 변수를 사용할 수 있다.
당연히 함수 내에서도 사용이 가능하다.
아래 코드를 보자.
1
2
3
4
5
6
|
const hello = 'Hello Marcus'
function marcusHello () {
console.log(hello)
}
console.log(hello) // 'Hello Marcus!'
sayHello() // 'Hello Marcus!'
|
cs |
비록 위와같이 전역 스코프를 이용하여 변수를 선언할 수 있지만 그렇지 않는게 좋다.
왜냐하면, 두 개 이상의 변수의 이름이 충돌하는 경우가 생길 수도 있기 때문이다. 실제로 초기 프로그래밍 언어는 이 대응표를 프로그램 전체에서 하나로 관리했는데, 여기에는 이름 충돌의 문제가 있었다.
1
2
3
|
// 잘못된 예시
let thing = 'Marcus'
let thing = 'Marcus else' // 이미 같은 이름의 변수가 존재.
|
cs |
만약 var를 이용하여 변수를 선언했다면, 두 번째 변수가 첫 번째 변수를 덮어쓰게 된다.
// var는 되도록이면 사용하지 않도록 한다.
var thing = 'Marcus'
var thing = 'Marcus else' // 위에 thing = 'Marcus' -> 'Marcus else'
console.log(thing) // ‘Marcus else’
|
cs |
위와같이 변수를 선언한다면 나중에 코드양이 많아졌을 때 디버깅을 하기 어려움을 겪기때문에 되도록이면 var는 사용하지 않는다
지역 스코프
지역 스코프는 코드에서 특정 부분에서만 사용이 가능한 변수이다.
자바스크립트의 지역스코프에는에서는 크게 두 가지의 지역 스코프가 존재한다.
함수 스코프와 블록 스코프이다.
1. 함수 스코프
만약 함수 내부에서 변수를 선언한다면, 그 변수는 선언한 함수 내부에서만 사용이 가능하다.
아래 코드를 살펴보면 변수 hello는 marcusHello 스코프 내에 존재한다는 것을 알 수 있다.
function marcusHello () {
const hello = 'Hello Marcus!'
console.log(hello)
}
marcusHello() // 'Hello Marcus!!'
console.log(hello) // Error, hello is not defined
|
cs |
2. 블록 스코프
블록스코프는 중괄호{}내부에서 const또는 let으로 변수를 선언하면,
그 변수들은 중괄호 블록 내부에서만 사용이 가능하다.
아래 코드를 보자
{
const hello = 'Hello Marcus!'
console.log(hello) // 'Hello Marcus!'
}
console.log(hello) // Error, hello is not defined
|
cs |
Conlcusion
Scope는 전역스코프와 지역스코프가 있다.
지역스코프에는 함수스포크와 블록스코프가 있다.
'개발 언어 > Javascript' 카테고리의 다른 글
Javascript # 6 (var-let-const 차이) (0) | 2019.12.14 |
---|---|
Javascript #4 (Hoisting) (0) | 2019.12.11 |
Javascript #3 (alert, console) (0) | 2019.12.11 |
Javascript #2 (ECMAScript, Vanilla JS) (0) | 2019.12.11 |
Javascript #1 (Javascript) (0) | 2019.12.11 |