정보실

웹학교

정보실

javascript JavaScript Questions

본문

(고급) JavaScript 질문 및 설명의 긴 목록 ✨


https://github.com/lydiahallie/javascript-questions 


https://github.com/lydiahallie/javascript-questions/blob/master/ko-KR/README-ko_KR.md 


1. 무엇이 출력 될까요? 


function sayHi() {
  console.log(name);
  console.log(age);
  var name = "Lydia";
  let age = 21;
}

sayHi();


  • A: Lydia 그리고 undefined
  • B: Lydia 그리고 ReferenceError
  • C: ReferenceError 그리고 21
  • D: undefined 그리고 ReferenceError

정답: D


함수 내에서, 우선 var 키워드를 사용해 name 변수를 선언해요. 이것은 변수가 정의된 행에 실제로 도달할 때까지, undefined의 기본값으로 호이스팅 되(생성단계에 메모리 공간이 설정)는 것을 의미해요. name 변수를 출력하려는 줄에서 아직 변수를 정의하고 있지 않기 때문에, undefined 값을 유지하고 있어요.

let 키워드(그리고 const)를 가지는 변수들은, var와는 달리, 호이스팅 되지만 초기화 되지 않아요. 그것들을 선언(초기화)하는 줄 전에는 접근할 수 없어요. 이것은 "일시적 사각지대"라고 불려요. 선언되기 전 변수에 접근하려고 하면, JavaScript는 ReferenceError를 던져요.


2. 무엇이 출력 될까요? 


for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}


  • A: 0 1 2 그리고 0 1 2
  • B: 0 1 2 그리고 3 3 3
  • C: 3 3 3 그리고 0 1 2

정답: C


JavaScript의 이벤트 큐 때문에, setTimeout의 콜백 함수는 루프가 실행된 후에 호출돼요. 첫 번째의 루프 변수 i는 var 키워드를 사용해 선언되어 있기 때문에, 이 값은 전역 변수가 돼요. 루프 동안, 단항 연산자 ++를 사용하여, 매번 i의 값을 1씩 증가했어요. setTimeout콜백 함수가 호출되기까지, 첫 번째 예에서 i는 3이에요.


두 번째 루프에서, 변수 i는 let 키워드를 사용해 선언되었어요: let(그리고 const) 키워드로 선언된 변수는 블록 범위예요(블록은 { } 사이의 모든 것). 각각의 반복 동안, i는 새로운 값을 가지고, 각각의 값은 루프 안쪽 범위에 있어요.


3. 무엇이 출력 될까요? 


const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2;
  },
  perimeter: () => 2 * Math.PI * this.radius
};

console.log(shape.diameter());
console.log(shape.perimeter());


  • A: 20 그리고 62.83185307179586
  • B: 20 그리고 NaN
  • C: 20 그리고 63
  • D: NaN 그리고 63

정답: B


diameter의 값은 정규 함수지만, perimeter의 값은 화살표 함수라는 점을 유의하세요.  

화살표 함수에서, this 키워드는 통상적인 함수와는 다르게 현재 주위의 범위를 참조해요! 이것은 perimeter를 부르면, shape 객체가 아닌 그 주위의 범위(예를 들면 window)를 참조하는 것을 의미해요.  

그 객체에는 radius라는 값은 없기 때문에 undefined를 리턴해요.



페이지 정보

조회 59회 ]  작성일20-01-26 22:31

웹학교