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.)