JavaScript는 현대 웹 개발에 필수적인 언어이지만, 고급 개념을 익히면 개발자로서 차별화될 수 있습니다. 이 블로그에서는 주요 고급 JavaScript 주제를 살펴보고 다음 인터뷰에서 탁월한 성과를 거두는 데 도움이 되는 답변과 예시가 포함된 인터뷰 질문을 제공할 것입니다.
1. 폐쇄
폐쇄란 무엇인가요?
클로저는 외부 함수가 반환된 후에도 외부 범위에 대한 액세스를 유지하는 함수입니다.
function outerFunction(outerVariable) { return function innerFunction(innerVariable) { console.log(`Outer Variable: ${outerVariable}, Inner Variable: ${innerVariable}`); }; } const closureFunction = outerFunction("Hello"); closureFunction("World");
출력:
Outer Variable: Hello, Inner Variable: World
인터뷰 질문:
Q: 실제 시나리오에서 클로저를 어떻게 사용할 수 있나요?
A: 클로저는 JavaScript에서 개인 변수를 구현하거나 비동기 콜백에서 상태를 유지하는 등 데이터를 숨기는 데 유용합니다.
2. 약속과 비동기/대기
약속은 현재, 미래에 사용할 수 있거나 전혀 사용할 수 없는 가치를 나타냅니다. 비동기 작업을 더 잘 처리할 수 있습니다.
Async/Await의 예:
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => resolve("Data fetched"), 2000); }); } async function getData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error(error); } } getData();
출력:
Data fetched
인터뷰 질문:
Q: Promise.then()과 async/await의 차이점은 무엇인가요?
A: Promise.then()은 약속을 처리하는 데 사용되는 메서드인 반면, async/await는 비동기 코드를 동기식으로 보이게 하여 가독성을 높이는 구문 설탕을 제공합니다.
3. 이벤트 루프 및 동시성 모델
이벤트 루프는 어떻게 작동하나요?
이벤트 루프는 콜백 및 비동기 작업을 포함한 JavaScript 코드의 실행을 처리합니다.
예:
console.log("Start"); setTimeout(() => { console.log("Timeout"); }, 0); console.log("End");
출력:
Start End Timeout
인터뷰 질문:
Q: 콜스택과 이벤트 루프의 차이점을 설명해주세요.
A: 호출 스택은 함수 실행을 추적하는 반면, 이벤트 루프는 스택이 비어 있을 때 콜백과 같은 비동기 작업이 실행되도록 합니다.
4. 프로토타입과 상속
프로토타입을 사용하면 객체가 다른 객체로부터 속성과 메서드를 상속받을 수 있습니다.
예:
function Person(name) { this.name = name; } Person.prototype.greet = function() { console.log(`Hello, my name is ${this.name}`); }; const person1 = new Person("Alice"); person1.greet();
출력:
Hello, my name is Alice
인터뷰 질문:
Q: 프로토타입 상속은 클래식 상속과 어떻게 다릅니까?
A: 프로토타입 상속은 다른 객체에서 직접 상속하는 객체를 기반으로 하는 반면, 클래식 상속은 클래스 계층 구조에 의존합니다.
5. 카레
Currying은 여러 인수를 갖는 함수를 각각 단일 인수를 갖는 일련의 함수로 변환합니다.
function outerFunction(outerVariable) { return function innerFunction(innerVariable) { console.log(`Outer Variable: ${outerVariable}, Inner Variable: ${innerVariable}`); }; } const closureFunction = outerFunction("Hello"); closureFunction("World");
출력:
Outer Variable: Hello, Inner Variable: World
인터뷰 질문:
Q: JavaScript에서 커링을 사용하는 이유는 무엇입니까?
A: Currying을 사용하면 부분 적용이 가능해 코드 재사용성과 가독성이 향상됩니다.
6. 모듈 시스템
CommonJS와 ES 모듈 비교
예:
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => resolve("Data fetched"), 2000); }); } async function getData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error(error); } } getData();
인터뷰 질문:
Q: CommonJS보다 ES 모듈을 사용하면 어떤 이점이 있나요?
A: ES 모듈은 번들 크기 최적화를 위해 트리 쉐이킹을 지원하며 기본적으로 최신 브라우저에서 지원됩니다.
위 내용은 고급 JavaScript 마스터하기: 주요 주제 및 인터뷰 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!