유효범위
유효범위(Scope)는 변수의 수명을 의미
var vscope = 'global'; //global 이라는 값을 할당 전역변수
function fscope(){
var vscope = 'local' ; // 지역변수
alert(vscope);
}
fscope(); // local이 출력됨
var vscope = 'global';
function fscope(){
var vscope = 'local';
var lv = 'local variables';
alert(lv); //지역변수 이기때문에 지역에서만 접근이 가능한다.
}
fscope();
alert(lv); //undefined
var vscope = 'global';
function fscope(){
var vscope = 'local';
}
fscope();
alert(vscope); // global
함수내에 var을 쓰게되면 지역변수가 되기때문에 👉 global 로 출력이됨
var 을 사용하지않고 vscope = 'local' 을 쓴다면 전역변수의 값이 변하기 때문에 👉 local이 출력된다.
전역변수
함수 외부에서 선언된 변수, 👉프로그램 전체에서 접근할 수 있는 변수
지역변수
함수 내부에서 선언된 변수로, 함수가 실행되면 만들어지고 함수가 종료되면 소멸하는 변수 👉 함수 외부에서는 접근할 수 없
전역변수의 사용
MYAPP = {} // 전역변
MYAPP.calculator = {
'left' : null,
'right' : null
// 전역변수 소속 객체
}
MYAPP.coordinate = {
'left' : null,
'right' : null
// 전역변수 소속 객체
}
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum(){
return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum()); //30
불가피하게 전역변수를 사용해야 하는 경우는 하나의 객체를 전역변수로 만들고 객체의 속성으로 변수를 관리하는 방법을 사용
전역변수를 사용하고 싶지 않다면 -> 익명함수를 호출
(function(){
// 함수의 지역변수
var MYAPP = {}
MYAPP.calculator = {
'left' : null,
'right' : null
}
MYAPP.coordinate = {
'left' : null,
'right' : null
}
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum(){
return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum());
}())
유효범위의 대상 (함수)
🌟 자바스크립트는 함수에 대한 유효범위만을 제공한다. 많은 언어들이 블록(대체로 {,})에 대한 유효범위를 제공하는 것과 다른 점이다.
for(var i = 0; i < 1; i++){
var name = 'coding everybody';
// for문 if문 안에서 선언된 변수는 지역변수로서의 의미를 갖지 않는다.
}
alert(name);
정적 유효범위
자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다. 이러한 유효범위의 방식을 정적 유효범위(static scoping), 혹은 렉시컬(lexical scoping)이라고 한다.
var i = 5;
function a(){
var i = 10;
b();
}
function b(){
document.write(i);
// 지역변수가 존재하지 않을때 전역변수를 찾게됨
// i -> 5
}
a();
🌟 사용될때가 아니고 메소드가 정의될때 전역변수가 사용되게 된다.