본문 바로가기
Javascript

Javascript - Scope

by DGK 2021. 9. 27.

 

인프런 자바스크립트 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

Scope

 

  • Scope 란?
Scope는 변수에 대한 접근성을 의미한다.

 

 

  • local Scope vs global Scope
<local Scope>
//잘못된 예시

function myFunction( ){

	var carName = "Hyundai";
 
 }

console.log(carName);

// 결과 : 에러 발생

//함수 안에서 선언된 변수는 함수 안에서만 호출이 가능하다.
//함수 밖에서는 함수 안의 변수에 대한 접근성이 없다.(로컬 스코프의 특징)



//올바른 예시

function myFunction( ){

	var carName = "Hyundai";
	console.log(carName);
    
 }

myFunction( );

// 결과 : Hyundai
   
//즉, 함수 안에서 선언된 변수는 함수 안에서만 호출이 가능하다.


<global Scope>

var carName2 = "KIA";

function myFunction2( ){

	console.log(carName2);
     
 }

myFunction2( );

// 결과 : KIA

//즉, 함수 밖에서 선언된 변수는 함수 안팎에서 모두 호출이 가능하다.(글로벌 스코프의 특징)

 

 

  • 참고 : Scope와 무관한 내용
//함수코드 뒤에 함수의 호출코드가 나오는 경우(일반적인 경우)

var carName3 = "Volvo";

	function myFunction3( ){

	console.log(carName3);
    
 }

myFunction3( );				//함수 실행가능



//함수의 호출코드 뒤에 함수코드가 나오는 경우

var carName3 = "Volvo";

myFunction3( );				//함수 실행가능


	function myFunction3( ){
    
	console.log(carName3);
            
 }


// 결과 : 둘 다 모두 함수가 실행된다.

//함수의 호출코드[myFunction3();]가 함수코드[function myFunction3(){}]보다
//먼저 나와도 에러가 발생하지 않고 함수가 정상적으로 실행된다.

//그 이유는 자바스크립트가 스크립트 태그를 해석할 때 항상 함수코드를 먼저 해석하고,
//이후에 함수의 호출코드를 해석하여 함수를 실행하기 때문이다.(자바스크립트 매커니즘)



//함수를 변수에 선언하고 함수코드 뒤에 함수의 호출코드가 나오는 경우(일반적인 경우)

var carName4 = "benz";

var myFunction4 = function( ){	//함수를 변수에 선언 시, 변수명이 함수이름이 됨

	console.log(carName4);
    
 }

myFunction4( );				//함수 실행가능



//함수를 변수에 선언하고 함수의 호출코드 뒤에 함수코드가 나오는 경우

var carName4 = "benz";

myFunction4( );				//에러 발생

var myFunction4 = function( ){ 

	console.log(carName4);
            
 }
 
 
 // 결과 : 함수를 변수에 선언하는 경우, 반드시 함수코드 뒤에 함수의 호출코드가 와야한다.
 
 //자바스크립트가 함수코드는 먼저 해석하지만, 함수를 변수에 선언하는 경우에는 
 //해당 변수를 먼저 해석하지 않고 원래의 코드 위치에서 해석을 한다.
 
 //즉, 변수에 함수 선언 시 함수코드[var myFunction4 = function(){}]가 함수의 
 //호출코드[myFunction4();]보다 뒤에 나올 경우 함수호출 시점에서 함수가 정의되지 않는
 //문제가 발생하여 에러가 나타난다.

'Javascript' 카테고리의 다른 글

Javascript - Rest Parameter  (0) 2021.09.30
Javascript - Default Function Parameter  (0) 2021.09.27
Javascript - this 키워드  (0) 2021.09.27
Javascript - 크롬 개발자 도구  (0) 2021.09.22
Javascript - Window 객체  (0) 2021.09.22

댓글