-
Notifications
You must be signed in to change notification settings - Fork 0
week01 jwcho
jwcho edited this page Feb 25, 2023
·
2 revisions
- 전역변수 - 어플리케이션 실행 시
- 지역변수 - 변수가 해당하는 함수 실행 시
ex)
function foo() {
var x = 'local';
console.log(x);
return x;
}
foo();실행 순서
- x변수 선언
- x변수에 undefined로 초기화
- 함수 실행
- x변수에 값이 할당
- 함수 종료 시 변수 x는 삭제
- 변수의 값은 메모리에 할당되어 있음
- 추후 가비지콜렉터에 의해 메모리 공간 해제 후 메모리 풀에 반환
- 암묵적 결합
- 모든 코드가 전역 변수르 참조하고 변경 할 수 있는 문제점
- 긴 생명 주기
- 전역 변수에 의해 메모리 리소스도 오랜 기간 소비됨
- 스코프 체인 상에서 종점에 존재
- 전역 변수가 가장 마지막에 검색된다.( 검색 속도가 가장 느리다. )
- 네임스페이스 오염
- 전역 스코프를 공유하기 때문에 휴먼에러 발생 가능성이 많다
- 즉시 실행 함수
(function() {
var foo = 10; //즉시 실행 함수의 지역 변수
}());- 네임 스페이스 객체
var obj = {}; //전역 네임스페이스 객체
obj.name = 'name';
console.log(obj.name);- 모듈 패턴
- 자바스크립트의 경우 public, private, protected등 접근 제한자를 제공하지 않기 때문에 모듈 패턴을 통해 정보 은닉을 구현한다.
var Counter = (function() {
var private_value = 0; //private변수
return {
increase (){
return ++private_value;
},
decrease (){
return --private_value;
}
}
})
console.log(Counter.private_value); //undefined
console.log(Counter.increase()); // 1
console.log(Counter.increase()); // 2
console.log(Counter.decrease()); // 1
console.log(Counter.decrease()); // 0- ES6 모듈 사용
- ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공
- 따라서 var로 선언한 변수도 전역변수가 아니며 window객체의 프로퍼티도 아니게 된다.
<script type="module" src="test1.mjs"></script>
<script type="module" src="test2.mjs"></script>