JavaScript 인터뷰 코딩 질문 — 1

온라인 코딩은 소프트웨어 개발자 취업 면접의 중요한 부분입니다. 이 기사에서는 몇 가지 코딩 질문을 추가하려고 합니다. 작업 기반 코딩 질문 대신 평가 중심의 코드 스니펫이 될 것입니다. 또한 모든 질문이 끝날 때마다 온라인 코드 링크를 공유하겠습니다.

가장 잘 알려진 것 중 하나부터 시작하겠습니다.

  • 이 질문에서는 클로저 및 비동기 코드 처리 지식을 평가합니다.

    // What will be the console log of the code below?
    for (var i = 0; i < 4; i++) {
      setTimeout(() => console.log(i), 0);
    }
    
    setTimeout()
    비동기 함수이며 for 주기가 완료된 후 실행됩니다. ifor 루프의 범위 밖에서 정의되며 console.log()가 쓰기를 시작할 때 4와 같습니다.
    0, 1, 2, 3을 쓰도록 어떻게 고칠 수 있습니까? 가능한 솔루션은 다음과 같습니다.

    // Solution 1:
    for (let i = 0; i < 4; i++) {
      setTimeout(() => console.log(i), 0);
    }
    
    // Solution 2:
    for (var i = 0; i < 4; i++) {
      (function (i) {
        setTimeout(() => console.log(i), 0);
      })(i);
    }
    

    해결 방법 1: i의 선언을 var에서 let로 변경할 수 있습니다.let는 블록 범위 변수이지만 var는 함수 범위 변수이기 때문입니다.
    해결 방법 2: 제한하는 기능으로 래핑할 수 있습니다setTimeout().i 변수의 범위. 그러나 IIFE(Immediately-invoked Function Expression)에 매개변수로 i를 전달해야 합니다.

    아래에서 테스트할 수 있습니다.





  • 이것은 이것의 범위에 관한 것입니다.


    // What will be the logs in console?
    function nameLogger() {
      this.name = 'halil';
      console.log('first:', this.name);
    }
    
    console.log('second:', this.name);
    nameLogger();
    console.log('third:', this.name);
    

    콘솔 출력은 다음과 같습니다.


    second: undefined
    first: halil
    third: halil
    

    "초"가 실행되는 동안this.name은 정의되지 않지만nameLogger() 함수가 실행된 후에 정의됩니다. this는 함수의 전역 개체를 참조하기 때문입니다. 그래서 다른 사람들은 예상대로 "halil"을 기록합니다.

    !! 'use strict'에서는 작동하지 않습니다. 함수에서 엄격 모드에서는 this가 전역 객체 대신 undefined와 같기 때문입니다.



    아래에서 테스트할 수 있습니다.


    <사업부 클래스="ltag__replit">
    <iframe frameborder="0"height="550px"src="https://repl.it/@hco/Scope-this?lite=true"loading="게으른"/>



  • 마지막은 thisbind에 관한 것입니다.


    // What will be written?
    const module = {
      x: 55,
      getX: function () {
        console.log('x:', this.x);
      }
    };
    const unboundX = module.getX;
    unboundX();
    

    x: undefined가 현재 소유자 개체를 참조하기 때문에 콘솔 출력은 this가 됩니다. 따라서 새 개체getXunboundX 메서드만 할당하면 this가 이를 참조합니다. 그리고 x 속성이 없기 때문에 this.xundefined와 같습니다.

    아래와 같이 bind()를 사용하여 수정할 수 있습니다.


    const boundX = unboundX.bind(module);
    boundX();
    

    이제 모듈 개체를 unboundX 함수에 바인딩합니다. 그러면 모듈의 x 속성에 도달할 수 있습니다.



    아래에서 테스트할 수 있습니다.


    <사업부 클래스="ltag__replit">
    <iframe frameborder="0"height="550px"src="https://repl.it/@hco/Function-bind?lite=true"loading="게으른"/>




  • 아래 링크에서 다른 기사를 읽을 수 있습니다.


    <사업부 클래스="ltag__link">





    <사업부 클래스="ltag__link">





    <사업부 클래스="ltag__link">


    좋은 웹페이지 즐겨찾기