javascript 코딩 경험이 많다면 다 겪어봤을 개념들 입니다. 정확한 명칭은 생각이 안나도 개념과 흐름은 어느정도 파악하고 있는분들께는 한번더 전체적인 개념 정립에 도움이 될것입니다.
면접에서 자주 등장하는 자바스크립트 개념을 정리하고, 실전에서 활용할 수 있도록 예제 코드와 설명을 제공합니다.
1. 메모리 관리
자바스크립트가 메모리를 어떻게 처리하는지 이해하면 최적화된 코드를 작성할 수 있습니다.
🔹 Hoisting (호이스팅)
변수와 함수 선언이 실행 컨텍스트 생성 단계에서 어떻게 끌어올려지는지 살펴봅니다.
console.log(x); // undefined
var x = 10;
sayHello(); // "Hello"
function sayHello() {
console.log("Hello");
}
console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 20;
console.log(add(1, 2)); // TypeError: add is not a function
var add = function(a, b) {
return a + b;
};
📌 설명: 변수 선언은 호이스팅되지만 값 할당은 호이스팅되지 않기 때문에 undefined가 출력됩니다.
🔹 Lexical Scope (어휘적 스코프)
자바스크립트가 어휘적 환경에서 변수 접근성을 어떻게 결정하는지 이해하세요.
function outer() {
var x = 10;
function inner() {
console.log(x); // 10
}
inner();
}
outer();
📌 설명: 내부 함수 inner는 자신을 포함하는 외부 스코프 outer의 변수 x에 접근할 수 있습니다.
반응형
🔹 Closures (클로저)
클로저는 함수가 부모 함수 실행 후에도 변수에 접근할 수 있도록 합니다.
function outerFunc() {
var count = 0;
return function() {
count++;
return count;
};
}
var counter = outerFunc();
console.log(counter()); // 1
console.log(counter()); // 2
📌 설명: count 변수는 outerFunc가 종료된 후에도 counter 함수가 유지하면서 값을 증가시킬 수 있습니다.
🔹Scope & Closure Chaining (스코프 및 클로저 체이닝)
중첩 스코프의 개념과 클로저를 사용하여 private 변수와 캡슐화를 만드는 방법을 깊이 탐구하세요.
function outer() {
var privateVar = "secret";
return function inner() {
return privateVar;
};
}
var getSecret = outer();
console.log(getSecret()); // "secret"
설명: privateVar는 외부에서 직접 접근할 수 없으며, inner 함수를 통해서만 접근할 수 있어 캡슐화를 구현합니다.
2. 런타임 환경
자바스크립트 코드가 실행되는 방식을 이해하면 성능 최적화와 디버깅에 도움이 됩니다.
🔹 Execution Context (실행 컨텍스트)
자바스크립트 실행 컨텍스트 스택을 이해하고 코드가 어떻게 실행되는지 살펴보세요.
function outer() {
console.log("Outer start");
function inner() {
console.log("Inner");
}
inner();
console.log("Outer end");
}
outer();