본문으로 건너뛰기

JavaScript 치트시트

12. 고급 문법

12.1 클로저

function outer() {
let count = 0;
return function () {
count++;
console.log(count);
};
}

const increment = outer();
increment(); // 1
increment(); // 2

12.2 IIFE (즉시 실행 함수)

(function () {
console.log('즉시 실행되는 함수');
})();

12.3 제너레이터 함수 (function*)

function* generator() {
yield 1;
yield 2;
yield 3;
}

const gen = generator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

12.4 Proxy와 Reflect

const target = {};
const handler = {
get: function (obj, prop) {
return prop in obj ? obj[prop] : '없음';
},
};
const proxy = new Proxy(target, handler);
proxy.name = 'Alice';
console.log(proxy.name); // Alice
console.log(proxy.age); // 없음

12.5 Symbol과 Iterator

const myIterable = {
[Symbol.iterator]: function* () {
yield 1;
yield 2;
yield 3;
},
};
for (const val of myIterable) {
console.log(val);
}

12.6 메모이제이션 (Memoization)

function memoize(fn) {
const cache = {};
return function (...args) {
const key = args.toString();
if (cache[key]) return cache[key];
const result = fn(...args);
cache[key] = result;
return result;
};
}

const factorial = memoize(function (n) {
return n <= 1 ? 1 : n * factorial(n - 1);
});
console.log(factorial(5)); // 120
console.log(factorial(5)); // 캐시 사용 120