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
주기가 완료된 후 실행됩니다. i
는 for
루프의 범위 밖에서 정의되며 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="게으른"/>
마지막은 this
와 bind
에 관한 것입니다.
// What will be written?
const module = {
x: 55,
getX: function () {
console.log('x:', this.x);
}
};
const unboundX = module.getX;
unboundX();
x: undefined
가 현재 소유자 개체를 참조하기 때문에 콘솔 출력은 this
가 됩니다. 따라서 새 개체getX
에 unboundX
메서드만 할당하면 this
가 이를 참조합니다. 그리고 x
속성이 없기 때문에 this.x
가 undefined
와 같습니다.
아래와 같이 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">
JavaScript 인터뷰 코딩 질문 — 2
Halil Can Ozcelik ・ 1월 6일 ・ 2분 읽기
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 - 3
Halil Can Ozcelik ・ 1월 7일 ・ 3분 읽기
<사업부 클래스="ltag__link">
Chrome DevTool 팁
Halil Can Ozcelik ・ 2019년 12월 20일 ・ 2분 읽기
Reference
이 문제에 관하여(JavaScript 인터뷰 코딩 질문 — 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/halilcanozcelik/javascript-interview-coding-questions-1-4alk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)