let greeting = 'Hello';
function greetSomeone() {
let firstName = 'Josh';
return greeting + ' ' + firstName;
}
greetSomeone(); // 'Hellow Josh'
firstName; // Uncaught ReferenceError: firstName is not defined
let name = 'Richard';
function showName() {
let name = 'Jack' //지역변수, 전역에서 선언한 name과는 다른 변수!!
console.log(name); //Jack (지역변수가 전역변수보다 우선시되므로)
}
console.log(name); //Richard
showName();
console.log(name); //Richard
1) var 키워드(old way)
JavaScript는 기본적으로 함수 단위로 자신만의 Scope를 가진다
2) let 키워드
그러나, Block 단위로 Scope를 구분했을 때에 예측하기 쉬운 코드를 작성할 수 있다. let 키워드를 썼을 때는 block의 영역 안에서만 사용할 수 있기 때문!
for(var i = 0; i < 5; i++) {
console.log(i); //5번 iteration
}
console.log('final i:', i); //5
3) const 키워드
<키워드 비교 정리>
실제 코딩을 할 때 재선언을 하게 되는 경우는 대게 버그이다. 따라서 let 과 const는 이러한 실수를 막아준다.
var myName = 'Paul';
console.log(window.myName); //Paul
function showAge () {
age = 90; // age는 전역변수로 취급!
console.log(age);
}
showAge(); //90
console.log(age); //90
" 클로저는 함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다."
1) 커링
: 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법
function adder(x) {
return function(y) {
return x+y;
}
}
adder(2)(3); // 5
x값을 고정해놓고 재사용할 수 있다!
let add100 = adder(100);
add100(2); //102
add100(10); //110
adder라는 함수는 함수를 생성해주는 함수!
2) 외부 함수의 변수를 이너 함수가 계속 재사용하면서 마치 템플릿 함수와 같이 사용 가능
3) 클로저 모듈 패턴
: 변수를 스코프 안쪽에 가두어 함수 밖으로 노출시키지 않는 방법
function makeCounter() {
let privateCounter = 0;
return {
increment: function() {
privateCounter ++;
},
decrement: function() {
privateCOunter--;
},
getValue: function() {
return privateCounter;
}
}
}
let counter1 = makeCounter();
counter1.increment();
counter1.increment();
counter1.getValue(); // 2
let counter2 = makeCounter();
counter2.increment();
counter2.decrement();
counter2.increment();
counter2.getValue(); // 1
privateCounter; //ReferenceError
Self-Check
Scope
- JavaScript의 Scope의 의미와 적용 범위를 이해할 수 있다
- JavaScript의 Scope 주요 규칙을 이해할 수 있다
< 중첩 규칙
< block scope(block-level scope) vs. function scope(function-level scope)
< let, const, var의 차이
< 전역 변수와 전역 객체의 의미Closure
- Closure의 정의와 특징에 대해서 이해할 수 있다.
- Closure를 활용해서 외부함수의 변수에 접근할 수 있다.
- Closure의 유용하게 쓰이는 몇 가지 코딩 패턴을 이해할 수 있다