POLP(The Principle of Least Privilege)를 지켜주면 시스템이 보안 차원에서 강해진다. POLP는 시스템 수준의 구성에 초점을 맞춘 것이고, POLE(Least Exposure)는 스코프가 상호작용하는 방식, 좀 더 낮은 수준에 초점을 맞춘다.
즉, POLE은 각 스코프에 등록된 변수들의 노출을 최소화해주는 것을 말하며 정말.. 당연하지만 이름 충돌, 예기치 못한 동작, 의도치 않은 존속을 예방할 수 있다.
var factorial = (function hideTheCache() {
var cache = {};
function factorial(x) {
if (x < 2) return 1;
if (!(x in cache)) {
cache[x] = x * factorial(x - 1);
}
return cache[x];
}
return factorial;
})();
factorial(6);
// 720
factorial(7);
// 5040
IIFE는 즉시 실행되는 함수표현으로 변수나 함수들을 숨기고 싶을 때 사용하고 표현식으로 분류된다. ()()에서 단독으로 쓰일 때만 첫번째 괄호를 요하고 아니라면 필수는 아니지만 일관성을 위해 넣기로 하자.
return, this, break, continue 같은 경우 IIFE가 부적합할 수도 있다. 대신은 블록을 이용하는 것이?(복선)
{}
은 내부에 let이나 const가 나타났을 때 스코프가 된다.
불필요하게 높은 범위에 두지 말고 좁은 곳에. 즉, 명시적으로 제한해주자!
var를 함수 최상위에.. 나머지는 let으로 하는 것이 어떨까 하는 것이 필자의 생각.
for 문에서 사용한 index 변수가 for 문이 끝난 다음에도 필요한 경우 아래와 같이 쓰자.
var는 쓰지 말고.
var lastI;
for (let i = 0; i < 5; i++) {
lastI = i;
if (checkValue(i)) {
break;
}
}
if (lastI < 5) {
console.log("The loop stopped early!");
}
try..catch.. 모르겠지만.. catch문은 err 혹은 let으로 선언된 변수에 대해서 블록 스코프인데, ES2019부터 선언을 선택할 수 있는데 선언이 없다면 스코프가 아니다.(블록은 맞음). 그래서 예외가 발생해서 내가 처리를 해야하지만 에러 값 자체를 신경 쓸 필요가 없으면 catch 선언을 생략해도 된다.
try {
doOptionOne();
}
catch { // catch-declaration omitted
doOptionTwoInstead();
}
쓰지마.. JS환경마다 다를 수 있다.