JavaScript 유효범위

김정훈·2024년 3월 26일

JavaScript

목록 보기
8/19

유효범위

유효범위(Scope)는 변수의 수명을 의미한다.

1. 지역변수와 전역변수

var vscope = `global`;
function fscope(){
  alert(vscope);
}
fscope();

vscope변수에 global이라는 값을 할당.
fscope()이라는 함수는 그 함수 안에 선언되어있지않은 함수밖에 선언되어있는 vscope라는 변수에 접근할수있다.

var vscope = `global`; //전역변수
function fscope(){
  var vscope = 'local'; //지역변수
  alert(vscope);
}
fscope();

local이 출력된다.
why? 함수내부에서 가까이 있는 지역변수가 있기때문에 먼저 지역변수에 값을 출력한다.

var vscope = `global`;
function fscope(){
  alert(vscope);
}
function fscope2(){
  alert(vscope);
}
fscope();
fscope2();

global이 두번 출력된다.
why? 전역변수는 모든 함수에서 접근이 가능하기 때문이다.

var vscope = `global`; //전역변수
function fscope(){
  var vscope = 'local'; //지역변수
  var lv = 'local variables'; //지역변수
  alert(lv);
}
fscope();
alert(lv);

alert에서 lv는 undefined 취급을 받는다.
why? fscope함수 내부에 lv변수는 지역변수 이기때문에 외부에서 호출이 불가능하다.

var vscope = `global`; //전역변수
function fscope(){
  vscope = 'local'; //전역변수
}
fscope();

local이 출력된다.
why? var을 사용하지 않았기 때문에 전역변수의 vscope의 값을 local로 변경했기 때문이다.

var vscope = `global`; //전역변수
function fscope(){
  var vscope = 'local'; //지역변수
  vscope = 'local'; //지역변수
}
fscope();

local이 출력된다.
why? 이미 var로 지역변수를 선언했기 때문에 vscope = 'local은 지역변수 vscope의 값을 변경했기 때문이다.

전역변수 사용을 지양해야한다.
프로그래밍은 작은것에서 큰것에서 발전되기 때문에 그 과정에서 협업 중 똑같은 이름의 변수를 다르게 사용할 수 있기 때문에 의도하지 않는 코드가 이루어질 수 있다.
지역변수를 사용하는것이 이러한 문제를 회피할수있다.

2. 유효범위의 효용

function a (){
  var i = 0; //지역변수
}
for(var i = 0; i < 5; i++){
  a();
  documen.write(i);

01234출력

function a (){
  i = 0; //전역변수
}
for(var i = 0; i < 5; i++){ //전역변수
  a();
  documen.write(i);

오류
why? a함수에서 i의 값을 0으로 하기 때문에 무한루프가 발생

3. 유효범위의 대상

자바스크립트는 함수에 대한 유효범위만을 제공한다. 많은 언어들이 블록(대체로{})에 대한 유효범위를 제공하는 것과 다른 점이다.

4. 정적 유효범위

자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다. 이러한 유효범위의 방식을 정적 유효범위 혹은 렉시컬 이라고 한다.

var i = 5; //전역변수
function a(){
  var i = 10; //지역변수
  b();
}
function b(){
  document.write(i);
}
a();

5출력
why? 사용될 때가 아니라 정의될 때의 전역변수가 사용되게한다

profile
안녕하세요!

0개의 댓글