javascript - 유효범위

김동하·2020년 9월 18일
0

javascript

목록 보기
10/58

지역 변수 / 전역 변수

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

let vscope = "global"

function fscope(){
  console.log(vscope)
}

fscope() // global

여기서 포인트는 fscope() 함수가 함수 밖 변수에 접근할 수 있다는 것

let vscope = "global"

function fscope(){
  let vscope = "local"
  console.log(vscope)
}

fscope() // local

함수 안에 vscope를 선언하면 그 값을 가진다. global의 경우 전역변수, local은 지역변수


let vscope = "global"

function fscope(){
  vscope = "local"
  
}

fscope()
console.log(vscope) // local

vscope에 재할당이 가능하게 let으로 선언하고 함수 안 vscope에 const를 없애고 console.log를 함수 밖으로 빼서 실행하면 local이 나온다. 이유는 함수 밖 console이 호출하는 건 전역에 있는 vscope인데 fscope()에서 재할당 되어서 local로 값이 바뀐 것이다. (공부 더 필요)

let vscope = "global"

function fscope(){
  let vscope = "local"
  vscope = "local"
  
}

fscope()
console.log(vscope) // global

함수에 let으로 선언한 vscope를 넣으면 global로 바뀐다. 지역 변수가 선언되지 않은 변수는 우선적으로 local 변수가 있는지 확인한다. 만약 local 변수가 없으면 전역 변수를 사용한다.

유효범위 효용

function a(){
  i = 0;
}

for(let i =0; i<5; i++){
  a()
  console.log(i) // 무한 반복
}

for 문 안에 i는 전역 변수고 함수 a안에 i는 전역 변수를 가리킨다. for문이 실행될 때마다 i 값이 0으로 초기화 되어서 무한 반복이 된다.

전역 변수 사용하기

let OBJECT = {}

OBJECT.calculator = {
    'left' : null,
    'right' : null
}
OBJECT.coordinate = {
    'left' : null,
    'right' : null
}
 
OBJECT.calculator.left = 10;
OBJECT.calculator.right = 20;


function sum(){
    return OBJECT.calculator.left + OBJECT.calculator.right;
}

console.log(sum()) // 30

전역 변수 OBJECT를 하나 생성하고 여러 프로퍼티를 사용해서 결과값을 다르게 할 수 있다. 익명 함수(즉시 실행 함수)로 전역 변수가 없는 함수를 만들 수 있다.

정적 유효범위

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

let i = 5;
function a(){
  let i = 10;
  b()
}

function b(){
  console.log(i) // 5
}

a()

함수 a 를 호출하면 지역 변수 a의 값은 10이 된다. 그리고 함수 b를 호출하면 함수 b 내부에 변수 i가 있는지 찾는다. 지역 변수가 없다면 전역 변수를 찾는다. 함수 b가 호출 됐을 때 i를 찾는지 아니면 정의되었을 때 i를 찾는지가 여기서 포인튼데 정적 유효범위에 따라 정의되었을 때 전역 변수를 가져온다.

함수 b는 어디서 사용될지 모른다. 사용될 때의 함수 안의 변수에 접근하면 동적인 유효 범위다.

참고 : 생활코딩

profile
프론트엔드 개발

0개의 댓글