본문 바로가기
Coding/Javascript

Javascript - 유효범위(Scope)

by z쿳쿳z 2020. 5. 19.
728x90
반응형

유효범위(Scope)

 - 유효범위는 변수의 수명을 의미한다.

 - 함수 밖에서 변수를 선언하면 그 변수는 전역변수(global)가 된다.

 - 함수안에 함수에서 선언한 변수나 for나 if문 같은 block scope 안에 있는 변수는 지역변수(local)이 된다.(하단에서 추가 설명)

 - 하기 사진을 보면

  *greeting은 전연변수로 선언이 되어서, greetSomeone 함수 안에서는 호출이 가능하다.

  *하지만, 함수가 끝나고 변수를 호출 했을 때는 호출이 불가능 하다.

  *전역변수보다는 지역변수 사용이 좋다.(전역변수와 지역변수와 이름이 같을 때, 혼동이 오기 때문이다.)

from codestates

  

  *변수를 선언할 때는 꼭 선언 해주는 var, let, const를 사용 하는 것을 추천 한다.(선언 해주는 키워드를 사용 하지않으면 변수에 값을 새로 할당 하기 떄문에 변수의 값이 변할 수 있음)

  *불가피하게 전역변수를 사용해야 하는 경우는 하나의 객체를 전역변수로 만들고 객체의 속성으로 변수를 관리하는 방법을 사용.

  *Javascript는 기본적으로, 함수가 선언되는 동시에 자신만의 scope를 가진다.

  *local scope에서 바깥(global)변수 or 함수를 접근하는 것은 가능

  *global에서 local에 있는 변수 or 함수를 접근 하는 것은 불가능 

  *function scope Vs. block scope(block은 중괄호로 시작하고, 끝나는 단위)

   예시) for문 같은 경우(block scope)

              하기 코드를 실행 시키면, for 문 안에 있는 console.log에서 i는 실행이 되지만, for문 밖에 있는 i는 정의 되지 않음!!

for(let i = 0; i < 3; i++){
  console.log(i);
  }
  console.log(i);

 

*var : javascript는 기본적으로, 함수 단위로 자신만의 scope를 가진다 ==> function scope (전역변수로 사용 되기 때문에 많은 양의 코드에서는 구분 하기 어려움이 있음(재사용의 위험성이 있음)

  *let : block 단위로 scope를 구분했을 때, 예측하기 쉬운 코드를 작성할 수 있다.(block 내에만 유효하기 때문에 변수 중복을 방지 할 수 있다. 지역변수로 사용 되기 때문에 많은 양의 코드에서는 구분하기 쉬움)

  *const : 값이 변하지 않는 변수, 즉 상수를 정의할 때 사요한다.(let 키워드와 동일하게 block scope를 따른다. 값을 재정의 하려고 하면 type Error를 낸다.)

from codestates

  예시) var와 let의 차이점

  *var를 선언 했을 때, if문 밖에서도 greeting을 불러올 수 있다.(var는 function scope ==> 함수내에서 어디서든 사용가능)

  *let을 선언 했을 때, if문 밖에서도 greeing1을 불러 올 수 없다.(let은 block scope ==> block 내에서만 사용가능)

from codestates

  

   예시)const

  *수정이 불가

 

#javascript#생활코딩#codestates#scope#global#local#lexical#var#let#const

728x90
반응형

'Coding > Javascript' 카테고리의 다른 글

Javascript - 콜백(Callback)  (1) 2020.05.25
Javascript - 클로저(closure)  (1) 2020.05.24
Javascript - 문자열 메소드(method)  (1) 2020.05.18
Javascript - 배열 메소드(method)(3)  (1) 2020.05.16