1.자바스크립트 클로저
-클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경의 조합이다.
즉, 내부함수가 외부함수에 의해 선언됐을 때 리턴되는 내부함수와 외부함수의 스코프의 조합이 되는 것이다.
따라서 함수는 호출된 뒤에는 그 함수 안에 있는 변수에 접근할 방법이 없지만 내부함수 즉, 클로저가 있는 경우 별도로 외부함수의 변수를 참조할 수 있다.
-클로저를 이용하는 경우 class의 private를 흉내낼 수 있다. 함수 내부의 변수는 외부에서 접근할 수 없기 때문에 함수 내부에서 this를 이용해 메소드를 사용하면 함수 내부의 변수 은닉화가 가능해진다.
-클로저는 전역변수의 사용을 억제하고 최신 값을 유지하는 데에 유용하다. 만약 전역변수에 값이 변경되면 안되는 경우 외부에서의 접근을 막기 위해 함수 내부에서 변수를 선언하고 클로저를 이용하면 최신 값으로 계속 변경될 수 있고 외부에서의 접근을 막을 수 있다.
2. ++count, count++
-++count 는 먼저 더한 후 출력하는 것이다. 만약
let count = 0;
function increase(){
return ++count;
}
console.log(increase()); //1
console.log(increase()); //2
console.log(increase()); //3
이런 코드가 있다면 콘솔에 찍을 때 현재 count에 1을 더한 후에 출력한다.
하지만
let count = 0;
function increase(){
return count++;
}
console.log(increase()); //0
console.log(increase()); //1
console.log(increase()); //2
console.log(count); //3
count++인 경우 현재 count를 출력한 다음 1을 더하게 된다. 따라서 increase()를 3번하면 콘솔에 찍히는 것은 0, 1, 2이지만 마지막에 2가 출력된 후에 1이 더해진 상태이므로 count는 3이다.
3.nullish
: 값이 null도 아니고 undefined도 아닌 값이 반환
let firstName = null;
let lastName = null;
let nickName = "바이올렛";
// null이나 undefined가 아닌 첫 번째 피연산자
alert(firstName ?? lastName ?? nickName ?? "익명의 사용자"); // 바이올렛
-||(or)과 차이점
:|| 는 true/false를 판별하는 논리 연산자이기 때문에 0도 false가 된다.
하지만 ??의 경우 값이 확정이 되어있냐, 안되어있냐를 판별하기 때문에 0은 0이라는 값이 판별되어 있는 것이다. 즉,
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
이렇게 0이 피연산자에 있을 때 결과값이 다르게 된다. 따라서 0을 false가 아닌 할당된 값으로 계산해야하는 높이 등의 경우 ??을 쓰는 것이 적절하다.
4. 백준 1문제, 프로그래머스 2문제
'일상 > Today I Learned' 카테고리의 다른 글
2022.09.26 (0) | 2022.09.26 |
---|---|
2022.09.22 (0) | 2022.09.22 |
2022.09.19 (1) | 2022.09.19 |
2022.09.18 (0) | 2022.09.18 |
2022.09.16 (0) | 2022.09.16 |