함수 스코프는 몇 가지 주의사항이 있다. 전 글에 있는 예문을 그대로 가져와 보겠다.
function isLocal() {
var local = "지역변수";
return `${local}는 로컬하다`
}
isLocal(); // output: 지역변수는 로컬하다
1. 함수는 서로의 스코프에 접근이 불가하다.
function isLocal() {
var local = "지역변수";
return `${local}는 로컬하다`
}
function getIsLocal() {
isLocal();
console.log(local);
}
getIsLocal(); // output: Uncaught ReferenceError: local is not defined
2. 스코프 체인(Scope Chain): 함수가 다른 함수의 내부에 정의된 상태에서, 내부 함수는 외부 함수의 변수에 접근가능하지만, 외부 함수는 내부 함수의 변수에 접근이 불가하다.
function first() {
var one = 1;
function second() {
var two = 2;
console.log(one);
}
second();
console.log(two);
}
first(); // output: 1, Uncaught ReferenceError: two is not defined
출력값의 1은 second()의 console.log(one)의 결과 값이고, ReferenceError는 first()의 console.log(two)에 대한 오류이다.
var a = 100;
function outer() {
var b = 50;
function inner() {
var c = 30;
console.log( a + b + c );
}
inner();
}
outer(); // output: 180
위 함수의 경우, console.log를 내부에서 실행시켰기 때문에 외부에 있는 모든 변수를 불러 올 수 있었다.
'■ 프로그래밍 > JavaScript' 카테고리의 다른 글
배열(Array) (1) - 생성, 접근, length (0) | 2020.03.03 |
---|---|
호이스팅 - 변수, 함수 (0) | 2020.02.29 |
스코프(Scope) (1) - 전역, 지역(함수, 블록) (0) | 2020.02.27 |
함수(Function) (2) - 화살표(Arrow) 함수 (0) | 2020.02.16 |
함수(Function) (1) - 선언, 호출, 매개변수, 인자, return (0) | 2020.02.16 |