정보실

웹학교

정보실

javascript 간단하지만 까다로운 JavaScript 인터뷰 질문 7 가지

본문

소프트웨어 개발에서 가장 강조하는 것은 다음과 같습니다.

  • 코딩 인터뷰
  • 독성 관리자 또는 팀원

JavaScript, this, CSS, Internet Explorer가 아니라 위의 2입니다.


JavaScript가 포함 된 선임 개발자 자격이 있는 경우 코딩 인터뷰 중에 까다로운 질문을 받을 수 있습니다.


불공평하다는 것을 알고 있습니다. 어떤 알 수 없는 사람들이 당신이 만든 것을 보기 위해 당신을 가장자리에 놓았습니다. 불쾌한 경험입니다.


당신은 무엇을 할 수 있나요?


다음과 같은 조언을 따르십시오.“연습은 완벽합니다.” JavaScript를 깊게 이해하기 위해 충분한 시간을 정기적으로 투자하면 코딩 능력이 향상되고 긍정적인 부작용으로 인터뷰 기술이 향상됩니다.


이 글에서는 첫눈에 간단하지만 까다로운 JavaScript 인터뷰 질문에 7 가지가 있습니다.


처음에는 질문이 무작위로 보이지만 중요한 JavaScript 개념에 연결하려고 합니다. 따라서 다음 인터뷰 전에 연습하는 것이 좋습니다!


1. 우발적 글로벌 변수 


질문 


다음 스니펫에서 typeof a 및 typeof b를 평가하는 대상 :


function foo() {
  let a = b = 0;
  a++;
  return a;
}

foo();
typeof a; // => ???typeof b; // => ???


대답 


2 행을 자세히 살펴 보자 : a = b = 0.이 문장은 실제로 지역 변수 a를 선언합니다. 그러나 전역 변수를 선언합니다. b.


foo() 범위나 전역 범위에 선언 된 변수 b가 없습니다. 따라서 JavaScript는 b = 0 표현식을 window.b = 0으로 해석합니다.


Accidental global variables JavaScript 


b는 실수로 생성 된 전역 변수입니다.

브라우저에서 위의 코드 스니펫은 다음과 같습니다.


function foo() {
  let a;  window.b = 0;  a = window.b;  a++;
  return a;
}

foo();
typeof a;        // => 'undefined'
typeof window.b; // => 'number'


typeof a는 'undefined'입니다. 변수 a는 foo() 범위 내에서만 선언되며 외부 범위에서는 사용할 수 없습니다.

typeof b는 'number'로 평가됩니다. b는 값이 0 인 전역 변수입니다.


2. 배열 길이 속성 


질문 


clothes[0]는 무엇입니까  :


const clothes = ['jacket', 't-shirt'];
clothes.length = 0;

clothes[0]; // => ???

대답 


배열 객체의 length 속성에는 특별한 동작이 있습니다.


length 속성 값을 줄이면 배열 인덱스가 이전 길이 값과 새 길이 값 사이에 있는 자체 배열 요소를 삭제하면 부작용이 발생합니다. 


이 길이 동작으로 인해 JavaScript가 clothes.length = 0을 실행하면 배열 의상의 모든 항목이 삭제됩니다.


옷 배열이 비었으므로 clothes [0]이 undefined입니다.


3. 독수리 눈 테스트 


질문 


숫자 배열의 내용은 무엇입니까?


const length = 4;
const numbers = [];
for (var i = 0; i < length; i++);{
  numbers.push(i + 1);
}

numbers; // => ???

대답 


세미콜론을 자세히 살펴 보겠습니다. 여는 중괄호 {:


The null statement effect 


이 세미콜론을 간과하기 쉬우며 null 문을 만듭니다. null 명령문은 아무 것도 수행하지 않는 빈 명령문입니다.


for()는 항목을 실제로 배열로 푸시 하는 블록을 무시하고 null 문에 대해 4 번 반복합니다 (아무 것도 수행하지 않음). {numbers.push (i + 1); }.


위 코드는 다음과 같습니다.


const length = 4;
const numbers = [];
var i;
for (i = 0; i < length; i++) {
  // does nothing
}
{ 
  // a simple block
  numbers.push(i + 1);
}

numbers; // => [5]


for()는 4까지 i 변수를 증가 시킵니다. 그런 다음 JavaScript는 블록 {numbers.push (i + 1); }, 4 + 1을 숫자 형 배열로 푸시합니다.


따라서 숫자는 [5]입니다.


이 질문 뒤에 내 이야기 


오래 전에, 첫 직장에서 인터뷰를 할 때 이 질문을 받았습니다.


인터뷰를 위해 1 시간 이내에 20 개의 코딩 질문을 받았습니다. null 문 질문이 목록에 있었습니다.


급한 질문을 풀었을 때 쉼표가 보이지 않았습니다. 중괄호 바로 앞에 {. 그래서 나는 잘못 대답했다 [1, 2, 3, 4].


나는 그러한 불공평 한 속임수 때문에 약간 실망했습니다. 면접관에게 그런 속임수의 이유가 무엇인지 물었습니다. 면접관이 대답했다.


"세부 사항에 주의를 기울이는 사람들이 필요하기 때문입니다."


다행히도 저는 그 회사에서 일하지 않았습니다. 


결론은 당신에게 맡기겠습니다.


4. 자동 세미콜론 삽입 


질문 


arrayFromValue()는 어떤 값을 반환합니까?


function arrayFromValue(item) {
  return
    [item];
}

arrayFromValue(10); // => ???

대답 


return 키워드와 [item] 표현식 사이에 줄 바꿈이 빠지기 쉽습니다.


줄 바꿈은 JavaScript가 리턴과 [item] 표현식 사이에 세미콜론을 자동으로 삽입하게 합니다.


반환 후 세미콜론을 삽입한 동등한 코드는 다음과 같습니다.


function arrayFromValue(item) {
  return;  [item];
}

arrayFromValue(10); // => undefined


반환; 함수 내에서 undefined로 반환합니다.


따라서 arrayFromValue(10)은 undefined으로 평가됩니다.


자동 세미콜론 삽입에 대한 자세한 내용을 보려면 이 섹션을 따르십시오.


5. 고전적인 질문 : 까다로운 폐쇄 


질문 


다음 스크립트를 콘솔에 출력하는 내용 :


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


대답 


이전에 이 까다로운 질문에 대해 들어 본 적이 없다면 대부분 0, 1, 2로 답이 잘못되었습니다. 내가 처음으로 그것을 해결하려고 했을 때, 이것은 나의 대답이기도 했습니다!


이 스니펫을 실행하는 데에는 2 단계가 있습니다.


1 단계 

  1. for() 반복 3 회. 각 반복 동안 변수 i를 캡처 하는 새로운 함수 log()가 작성됩니다. 그런 다음 setTimout()은 log()의 실행을 예약합니다.
  2. for() 사이클이 완료되면 i 변수의 값은 3입니다.

log()는 변수 i를 캡처하는 클로저로, for()주기의 외부 범위에 정의되어 있습니다. 클로저가 변수를 어휘 적으로 캡처 한다는 점을 이해하는 것이 중요합니다.


2 단계 


두 번째 단계는 100ms 후에 발생합니다.


3 개의 예약 된 log() 콜백은 setTimeout()에 의해 호출됩니다. log ()는 변수 i의 현재 값인 3을 읽고 콘솔 3에 기록합니다.


그렇기 때문에 콘솔의 출력은 3, 3, 3입니다.


스니펫을 수정하여 0, 1 및 3을 기록하는 방법을 알고 있습니까? 아래 의견에 솔루션을 작성하십시오!


6. 부동 소수점 수학 


질문 


평등 점검의 결과는 무엇입니까?


0.1 + 0.2 === 0.3 // => ???


대답 


먼저 0.1 + 0.2의 값을 살펴 보겠습니다.


0.1 + 0.2; // => 0.30000000000000004

0.1과 0.2의 합은 정확히 0.3이 아니라 0.3보다 약간 큽니다.


부동 소수점 숫자가 이진법으로 인코딩되는 방식으로 인해 부동 소수점 숫자 추가와 같은 연산에는 반올림 오류가 발생합니다.


간단히 말해 플로트를 직접 비교하는 것은 정확하지 않습니다.


Thus 0.1 + 0.2 === 0.3 is false. 


자세한 내용은 0.30000000000000004.com을 확인하십시오.


7. Hoisting 


질문 


선언하기 전에 myVar 및 myConst에 액세스하면 어떻게 됩니까?


myVar;   // => ???myConst; // => ???
var myVar = 'value';
const myConst = 3.14;


대답 


게양 및 일시적 데드 존은 JavaScript 변수의 수명주기에 영향을 주는 2 가지 중요한 개념입니다.


Temporal dead zone and hoisting in JavaScript 


선언하기 전에 myVar에 액세스하면 undefined으로 평가됩니다. 초기화 전에 게양 된 var 변수에는 undefined 값이 있습니다.


그러나 선언 줄 전에 myConst에 액세스하면 ReferenceError가 발생합니다. const 변수는 선언 줄 const myConst = 3.14까지 임시 데드 존에 있습니다.


호이스팅에 대한 이해를 높이려면 세부 정보의 JavaScript 변수 호이스팅 안내서를 따르십시오.


8. 주요 내용 


일부 질문은 인터뷰에 쓸모가 없다고 생각할 수 있습니다. 나는 특히 독수리 눈 테스트와 같은 느낌을 가지고 있습니다. 그래도 그들은 물을 수 있었습니다.


어쨌든, 이러한 질문의 대부분은 JavaScript에 익숙하다면 실제로 평가할 수 있습니다. 게시물을 읽는 동안 일부에 대답하기 어려운 경우 다음에 공부해야 할 내용을 나타내는 좋은 지표입니다!



페이지 정보

조회 55회 ]  작성일19-10-22 10:10

웹학교