스코프
변수와 상수 매개변수가 언제 어디서 정의되는지 결정합니다.
const f = (x) => x + 3;
f(5) //8
x; // undefined
x의 스코프(범위)가 함수 f라고 할 수 있다.
함수를 실제 호출할 때까지는 함수 바디의 정해진 매개변수(x)가 존재하지 않음을 상기.
let과 const는 식별자를 블록 스코프에서 선언.
var은 어디서 선언하든 호이스팅에 의해 전역 스코프가 된다.
호이스팅
1. 자바스크립트 엔진이 끌어올려 주는 것.
2. 변수의 사용 및 함수의 실행 코드가 선언보다 먼저 일어나도 정상 진행이 되도록 해주는 것
const funcc = () => {
var a = 'a';
}
이 코드는 a가 호이스팅 되어
var a;
const funcc = () => {
a = 'a';
}
자바스크립트 엔진이 이렇게 호이스팅을 해줍니다.
클로저
클로저를 통해 얻는 것들 :
1. 원하는 시점에 내부 클로저를 실행할 수 있음
2. private 변수를 가질 수 있음
let globalFunc; //정의되지 않은 전역 함수
{
let blockVar = 'a';
globalFunc = () => console.log(blockVar)
}
globalFunc(); //"a"
일반적으로 접근할 수 없는 것에 접근할 수 있는 효과도 있습니다. (private)
let func;
{
let objjj = { note: 'Safe' };
f = () => objjj;
}
let objRef = f();
objRef.note; // "Safe"
일반적으로는 스코프 바깥쪽에 있는 것들에는 접근이 불가능 한데, 함수를 정의해 클로저를 만들면
접근할 수 없었던 것(objjj)들에 접근이 가능합니다.
클로저 사용이 끝나면 참조를 제거하는 것이 좋습니다.
objRef = null // 가비지 컬렉터(gc)가 메모리를 회수해갑니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures
클로저
클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하기 위해서는 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다.
developer.mozilla.org
러닝 자바스크립트, 구글링으로 포스팅
'JavaScript' 카테고리의 다른 글
배열 고차 함수 (고계함수) (0) | 2019.06.16 |
---|---|
[19-06-12] ES6 (0) | 2019.06.13 |
[19-06-11] this, call, apply, bind (0) | 2019.06.11 |
자바스크립트 기초 (0) | 2019.06.10 |