scope : 변수 접근 규칙에 따른 유효 범위
변수는 어떤한 환경 내에서만 사용 가능하며 프로그래밍 언어는 각각의 변수 접근 규칙을 갖고 있습니다.
변수와 그값이 어디서부터 어디까지 유효한지를 판단하는 범위를 scope범위 라고 합니다.
javascrip는 기본적으로 함수가 선언되는 동시에 자신만의 scope를 가집니다.
1. 지역변수와 전역변수
함수를 호출한 greeSomeone()은 'Hello Josh'를 호출 하지만, firstName;은 에러가 뜹니다.
-> firstName은 함수 안에 정의 되어 있으므로 함수 안으로 접근을 할수가 없어서 에러가 나옵니다.
함수 greetSomone안에는 지역 변수 (Local Scope)라고 하고, 그밖에 전체를 전역변수(Global Scope)라고 한다.
함수를 호출 할때만 함수 안에 있는 전역 변수인 name(Jack)이 출력되고, 함수 출력이 아닌 name을 호출 할때는 전역변수에 선언되어 있는 name(Richard)가 출력된다. !
함수 안에 let 이라는 선언이 없기 때문에 초기화 하여 선언 하지 않고 바깥 name에 재선언을 하였으므로 name은 jack으로 변경 되었다
-> 안쪽 스코프에서는 바깥 스코프 참조가 가능하다. 그러나 바깥쪽에서는 안쪽 참조가 불가능하다.
-> 지역변수는 함수내에서 전역변수 보다 더 높은 우선 순위를 가집니다.
-> 전역변수는 최상단의 scope로 어디서든 접근이 가능합니다.
2. let, var, const 차이
let
let i 가 for문 안에서 선언되고 중괄호 {} 를 벗어 낫으므로 중괄호 밖에서는 사용이 불가 하다.
Block :{} 중괄로호 시작하고 끝나는 단위
var
var i는 중괄호 {}를 벗어 나도 계속 사용이 가능하다.
const
const를 초기 선언 하면 값을 변경 할수 없다. !!! (재정의 불가능)
3. window 객체
window객체 -> 전역에서 사용 가능한 것을 모아논 객체
var 로 선언하면 전역에서 사용 가능한 전역변수가 생성되므로 var로 선언하면 window객체에 삽입 된다.
var myName = ‘Paul’ ; 선언시
myName === window.myName; //true -> var로 선언하면서 window객체에 myName이 담겼고 같은지 비교 하면 true가 나온다.
4. 변수 선언시 주의점 !
let, var, const로 선언하지 않으면 전연변수가 되어 Block을 벗어나서 전역에서 사용가능해진다.
근데, 오류는 안떠서 가끔 이런 실수를 할 수가 있다. 그래서 실수를 방지 하기 위해
자바스크립트 상단에 ‘use strict’ 쓰면 문법적으로 실수할 수 있는 부분들을 에러로 판단해준다.
'Javascript' 카테고리의 다른 글
10. 객체지향 (0) | 2020.09.18 |
---|---|
9. closure 클로저 (0) | 2020.09.15 |
7.객체 (0) | 2020.09.12 |
6. 배열 (0) | 2020.09.10 |
5.반복문 (0) | 2020.09.10 |