SCOPE

uni_cap·2020년 4월 13일
0
post-thumbnail

scope란 무엇인가?

스코프란 범위라는 의미를 가지고 있습니다.
먼저 2가지 유형의 스코프가 있는데, 바로 전역스코프와, 지역스코프입니다.

저는 초보개발자입니다. 아직 개발공부를 시작한지 얼마 안되었는데요, 제가 혼란을 많이 가지게 되는 원인 중에 하나는 영어와 한글이 혼용되어 사용하다보니 의미의 전달이 헷갈릴때가 많았습니다.

그래서 저는 여기에 의미를 분명하게 밝혀 우리가 배우고자 하는 것들의 존재 이유에 대해서도 잘 정리해보고자 합니다.

scope , 범위 , 변수 헷갈리네?

조금 공부를 하시다 보면 전역변수, 지역변수 혹은 누구는 전역스코프, 지역스코프 이렇게 혼용해서 부르는 경우를 간간히 보게 됩니다.
저는 주제가 scope 이니 scope를 기준으로 정리해보겠습니다.
일단은 global = 전역 , local = 지역 , scope = 범위 라고 생각하세요.

Global scope, Local scope ,영향을 미치는 범위

위에서 scope는 범위라고 하였죠. 한국말로 생각해보면 global scope는 전역 범위입니다.
전역범위의 뜻을 잘 이해할 필요가 있는데요. 쉽게 풀어서 "전 지역에 자신의 영향력을 미친다."

예를 들어 어떤 변수에 값을 부여했다고 해봅시다.

var a = "yes";

function test(){
	var a = "no";
    	console.log(a);
        }
        
test();

console.log(a);

자 위의 예시를 보면 변수 a에 "yes" 라는 값을 부여했고(할당했고), 밑에는 test라는 function이 선언되어있습니다.

하지만 a라는 변수가 test 함수 내에도 존재하죠? 이 때 변수가 미치는 영향력이 달라집니다.
결론적으로, test 안에 있는 var a 는 test 함수 안에서만 영향력을 미칩니다.

test함수 윗 줄에 존재하는 var a는 함수 내에 존재하지 않기 때문에 전 범위, 즉 전역에 영향을 미치는 것입니다. 이게 global scope 이죠.

그렇다면 test(); 맨 밑줄의 console.log(a)는 어떤 값을 콘솔에 출력하게 될까요?

test()는 함수 내에 영향을 미치는 var a ="no"라는 local scope가 존재하기 때문에
변수의 "no"값이 console.log("no")가 되기 때문에 "no"라는 결과를 콘솔창에 실행시킬 것입니다.

하지만 마지막 console.log는 가장 맨 윗줄의 a 변수의 영향을 받습니다. 왜냐하면 맨 윗줄의 var a ="yes" 는 어느 함수에 포함되어있지 않기 때문이죠.(위의 로직 기준)

그러므로 맨 윗줄은 global 즉, 전역에 영향을 미치기 때문에 마지막 console.log는
"yes"값을 콘솔에 실행시킬 것입니다.

전역에 영향을 미치는 global scope의 의미를 하나 더 보여드리겠습니다.

var a = "yes";

function test(){
	console.log(a);
    }
    
test();    //  yes

예제를 조금 바꾸어 보았습니다.
test함수에 위의 예제에 있던 지역변수가 사라졌습니다. 그렇다면 test함수를 실행시킨 값은 어떻게 나올까요? 정답은 yes입니다.
왜냐하면 지역에서 영향력을 미치는 변수가 사라지면서 test함수는 a값을 이제 자신 함수 외부에서 찾습니다. 이때 전역에 영향을 미치던 var a = "yes"의 영향을 받은 것이죠.
그 영향을 받아 console.log(a)가 실행되어
test() 는 콘솔창에 yes를 실행시키게 됩니다.

정리하자면 local scope는 함수내에서 영향력을 미친다는 뜻이고 local variable(지역변수)이 그렇습니다. 그러므로 지역변수가 함수내에 존재한다면 그 함수는 지역범위의 영향을 받는 것이고 그 변수가 존재하지 않는다면 전역에 영향을 미치는 즉, global scope의 영향을 받아 전역변수의 값을 부여받게 되는 것입니다.

이제 조금 이해가 가시나요? 부족한 설명이지만 저도 너무 어렵게 이해하려하기 보다 최대한 쉬운 방향으로 이해하는게 초심자의 입장에서는 더 낫겠다는 생각이 들었습니다. 혹시 글을 읽어보시고 수정해야 할 부분이 있다면 알려주시면 감사합니다. 저에게 큰 도움이 됩니다. 읽어주셔서 감사합니다.

0개의 댓글