function add(x,y) {
//매개변수는 함수 몸체 내부에서만 참조 가능
console.log(x,y) // 2, 5
return x + y;
}
console.log(x,y) // Reference Error
//전역 스코프, 전역 변수
var x = "Global X"
var y = "Global Y"
function outer() {
//지역 변수, 지역 스코프
var z = "local Z"
console.log(x); //"Global X"
console.log(y); //"Global Y" 상위 스코프의 변수 참조 가능
}
console.log(z); //Reference Error 전역에서 지역에서 사용한 변수 참조 불가능
스코프는 함수의 중첩에 의해 계층적 구조를 갖고 이것이 연결 된 것을 스코프 체인이라 한다. 변수를 참조할 때 스코프 체인을 통해 해당 변수의 스코프에서 상위 스코프 방향으로 이동하며 변수를 검색한다.
상위 스코프에서 유효한 변수는 하위 스코프에서 자유롭게 참조가 가능하지만 반대는 불가능하다.
지역 스코프는 코드 블록이 아닌 함수에 의해서만 생성된다.
자바스크립트는 함수를 어디서 정의했는지에 따라 함수의 상위 스코프를 결정한다. 이를 렉시컬 스코프, 또는 정적 스코프라 한다.
var x = 1;
function foo() {
var x = 10;
bar ();
}
function bar () {
console.log(x);
}
//bar 함수가 어디서 정의 되었는지에 따라 상위 스코프 결정.
foo(); // 1
bar(); // 1