유효범위(Scope)
- 유효범위는 변수의 수명을 의미한다.
- 함수 밖에서 변수를 선언하면 그 변수는 전역변수(global)가 된다.
- 함수안에 함수에서 선언한 변수나 for나 if문 같은 block scope 안에 있는 변수는 지역변수(local)이 된다.(하단에서 추가 설명)
- 하기 사진을 보면
*greeting은 전연변수로 선언이 되어서, greetSomeone 함수 안에서는 호출이 가능하다.
*하지만, 함수가 끝나고 변수를 호출 했을 때는 호출이 불가능 하다.
*전역변수보다는 지역변수 사용이 좋다.(전역변수와 지역변수와 이름이 같을 때, 혼동이 오기 때문이다.)
*변수를 선언할 때는 꼭 선언 해주는 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를 낸다.)
예시) var와 let의 차이점
*var를 선언 했을 때, if문 밖에서도 greeting을 불러올 수 있다.(var는 function scope ==> 함수내에서 어디서든 사용가능)
*let을 선언 했을 때, if문 밖에서도 greeing1을 불러 올 수 없다.(let은 block scope ==> block 내에서만 사용가능)
예시)const
*수정이 불가
#javascript#생활코딩#codestates#scope#global#local#lexical#var#let#const
'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 |