오늘한 일
- Javascript Koans ch.01 ~ 04 까지 풀고 한 챕터를 끝낼 때마다 commit 하기
- loose equality(느슨한 동치 연산자) '==' 와 strict equality(엄격한 동치 연산자) '===' 학습
- 함수 선언식(declaration) 과 함수 표현식(expresstion) 의 차이, hoisting 이란? gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html
- scope, lexical scope, closure 학습
- var / let, const 의 차이점(function scope 와 block scope) (var 의 문제점과 지양해야하는 이유에 대해..) gist.github.com/LeoHeo/7c2a2a6dbcf80becaaa1e61e90091e5d
오늘 느낀점
- const 로 선언된 변수는 reassignment(재할당)이 금지된다. const로 선언된 객체의 경우 속성을 추가하거나 삭제, 수정할 수 없다. [하지만] const 로 선언된 배열의 경우는 추가, 삭제, 수정할 수 있다. 또 하나 주의할 점은 여전히 재할당은 금지된다.
- Nested scopes(lexical cosping) 란 함수가 다른 함수 내부에서 정의되었다면, 내부 함수는 외부 함수의 변수에 접근할 수 있다. 하지만, 외부 함수는 내부 함수의 변수에 접근할 수 없다.
let msg = 'global variable';
function getMessage() {
return msg;
}
function shadowGlobal() {
let msg = 'Inner';
return msg;
}
function shadowGlobal2(msg) {
return msg;
}
function shadowParameter(msg) {
msg = 'Do not use parameters like this!';
return msg;
}
console.log(getMessage()); // 'global variable'
console.log(shadowGlobal()); // 'Inner'
console.log(shadowGlobal2('Parameter')); // 'Parameter'
console.log(shadowParameter('Parameter')); // 'Do not use parameters like this!'
console.log(msg); // 'global variable'
- Closures(클로저) 는 함수 내부에 함수를 작성한 경우를 말한다. 클로저는 외부 함수의 변수를 사용할 수 있다.
function outerFunc(numOuter) {
return function (numInner) {
return numOuter + numInner;
};
}
const num3 = outerFunc(3);
const num5 = outerFunc(5);
console.log(num3(10)); // 13 outerFunc(3)(10) 와 같다.
console.log(num5(10)); // 15 outerFunc(5)(10) 와 같다.
console.log(outerFunc(8)(6) + outerFunc(5)(9); // 28
- scope, Closure 라는 새로운 개념을 배웠는데, 예전에 프로젝트를 하면서 기능 구현에만 집중하다 개념 정립할 시간없이 지나갔었다. 이렇게 학습할 수 있는 시간을 갖어 좋았다. 하지만 아직도 개념 정립이 잘 안됐는지 pair-programming 에서 pair 에게 설명을 하면서 막히기도 하고, 설명이 쉽지 않았다.. 좀 더 이론과 예시를 보면서 코딩 연습이 필요한 것 같다.
'오늘 한 일을 기록하자 > TIL' 카테고리의 다른 글
201102_TIL (0) | 2020.11.02 |
---|---|
201031_TIL (0) | 2020.10.31 |
201021_TIL (0) | 2020.10.21 |
201018_TIL (0) | 2020.10.18 |
201013_TIL (0) | 2020.10.14 |