Javascript - 스코프(Scope) 영역 범위

반응형

Java의 Scope

{ } 영역 안으로만 변수를 사용할 수 있습니다.

int a = 10;

if(a == 10){

System.out.println(a);

int b = 20;

System.out.println(b);

}

System.out.println(a+b); //error

 

JavaScript의 Scope

{ } 코드 블록으로 영역을 나누지 않습니다.

자바스크립트는 특정 구문이 실행 될 때 새로 생성합니다.


function : 함수, 가장 많이 사용
with        : 곧 사라질 구문(ECMAScript6부터 Deprecated)
catch        : 예외처리 구문

var a = 10;

if(a === 10){
   console.log(a);
   var b = 20;
   console.log(b);
}

console.log(a+b); //OK

 

function을 활용한 스코프 생성

function foo(){
   var val = 'hello JS';
}

console.log(typeof val === 'undefined'); //true

with를 활용한 스코프 생성

with({inScope : 'hello'}){
   var val = 'world';
   console.log(inScope);
}

console.log(typeof inScope ==='undefined'); //true
console.log(val ==='world'); //true
//with 구문은 코드가 모호 해질 가능성 아주 높다

 

catch를 활용한 스코프 생성

try{
   throw new exception('fake exception');
} catch (err){
   var value = 'catch scope';
   console.log(err instanceof ReferenceError === true); //true
}

console.log(value === 'catch scope'); //value 사용가능
console.log(typeof err === 'undefined'); //err 사용불가

 

catch 구문의 매개변수 err는 해당 스코프내에서만 포함되고,
catch 구문의 {  } 내부의 변수는 외부에서도 접근 가능합니다.

728x90
반응형