diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1735078..f7e644e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,21 +2,93 @@ ## Q1. + +아래 코드의 출력 결과를 쓰시오.
그 이유를 렉시컬 스코프 관점에서 설명하시오. + ```js -let name = "근자회"; -console.log("안녕, " + name + "!"); +const x = 10; + +function outer() { + const x = 20; + function inner() { + console.log(x); + } + return inner; +} + +const fn = outer(); +fn(); ``` ## Q2. +아래 코드의 실행 결과를 순서대로 쓰고, 코드 실행 중 실행 컨텍스트 스택(Call Stack)의 변화 과정을 단계별로 설명하시오. + +```js +var x = 1; + +function first() { + console.log("first start"); + second(); + console.log("first end"); +} + +function second() { + console.log("second"); +} + +first(); +``` ## Q3. +아래 코드가 호이스팅(hoisting) 된다면, 자바스크립트 엔진이 실제로 평가 단계에서 어떤 코드 구조로 인식하고 실행하는지 작성하시오. +또한 실행 컨텍스트 생성 시점(평가 단계)과 코드 실행 시점(실행 단계)에서 무슨 일이 일어나는지 간략히 설명하시오. + +```js +const x = 1; +const y = 2; + +function foo(a) { + const x = 10; + const y = 20; + + console.log(a + x + y); +} + +foo(100); + +console.log(x + y); +``` ## Q4. +아래의 코드 실행 시 에러가 발생한다면 어떤 에러인지 쓰고, 자바스크립트 엔진이 inner 실행 시 a, b, c, d를 검색하는 과정을 실행 컨텍스트의 렉시컬 환경 구성 기준으로 단계별로 간략히 설명하시오. + +```js +const a = 1; + +function outer() { + const b = 2; + function middle() { + const c = 3; + function inner() { + console.log(a, b, c, d); + } + inner(); + } + middle(); +} + +outer(); +``` ## Q5. +아래의 문제를 푸시오. + +(1) 자바스크립트에서 함수가 호출될 때마다 새로운 실행 컨텍스트가 생성된다. (O/X) +(2) 실행 컨텍스트 스택(Call Stack)에서 맨 위(top)에 있는 컨텍스트가 현재 실행 중인 코드의 실행 컨텍스트다. (O/X) +(3) 렉시컬 스코프는 함수가 “호출되는 시점”의 위치를 기준으로 결정된다. (O/X)