함수의 매개변수는 함수 몸체 내부에서만 참조할 수 있고, 함수 몸체 외부에서는 참조할 수 없다.
-> 매개변수의 스코프가 함수 몸체 내부로 한정되기 때문
모든 식별자는 자신이 선언된 위치에 따라 외부에서 자신을 참조할 수 없는 스코프라는 유효점위가 결정된다.
var x = 'global';
function foo() {
var x = 'local' ;
console. log(x); //local
}
foo() ;
console. log(x); //global
프로그래밍 언어에서는 스코프(유효범위)를 통해 식별자인 변수 이름의 충돌을 방지한다.
스코프 내에서 식별자의 이름은 유일해야하지만, 다른 스코프에서는 동일한 이름이 중복되어 사용될 수 있다 물론 이 스코프안에서도 동명의 스코프는 유일해야한다.
구분 | 설명 | 스코프 | 변수 |
---|---|---|---|
전역 | 코드의 최외각 | 전역 스코프 | 전역 변수 |
지역 | 함수 몸체 내부 | 지역 스코프 | 지역 변수 |
지역 변수는 자신의 지역 스코프와, 하위 지역 스코프에서 유의하다.
함수의 중첩 처럼 스코프도 중첩 될 수 있다. 이는 스코프가 함수의 중첩에 의해 계층적 구조를 갖는다는 것이다.
function foo() {
console.log('global function foo');
}
function bar() {
// 중첩 함수
function foo() {
console.log('local function foo');
}
foo();
}
bar();
//local function foo 출력
대부분의 프로그래밍 언어는 함수 몸체만이 아니라 코드 블록(if, for, while. try/catch ...)이 지역 스코프를 만든다.
하지만 var로 선언된 변수는 오로지 함수 몸체만을 지역 스코프로 인정한다.
이러한 특성이 함수레벨 스코프 이다.
var i = 10;
// for 문에서 선언한 1 는 전역 변수다. 이미 선언된 전역 변수 1가 있으므로 중복 선언된다.
for (var i = 0 ; i < 5 ; itt) {
console.log(i); // 01234
}
// 의도치 않게 변수의 값이 변경되었다.
console. log(i); // 5
var x = 1;
function foo() {
var x = 10;
bar ( );
}
function bar() {
console. log(x);
}
foo(); // 1 출력
bar(); // 1 출력