Js 연습 면접 질문
8689 단어 nodejavascriptinterview
제 이름은 Viktor이고 우크라이나 출신이며 Node.js 백엔드 엔지니어입니다.
오늘은 dev.to에 첫 글을 쓰게 되니 너무 욕하지 말아주세요.
우리 회사에서는 때때로 후보자 인터뷰에 참여하는데 주로 Node.js, AWS, 서버리스 스택에 관한 것입니다.
때때로 후보자의 기술을 평가하기 위해 코드의 출력에 대해 물어볼 수 있습니다. 내 경험상 이론을 잘 아는 지원자들이 엄청나게 많은데 일단 코드를 보여주면 90%는 정답을 내놓을 수 없다. 그래서 이론을 묻지 않고 코드를 보여주며 몇 가지 부분/영역을 평가하기로 했다.
이번 포스트에서는 지원자들에게 물어보는 5가지 예를 제시할 것입니다.
1. 화살표 기능
const obj = {
name: "Viktor",
getName: () => this.name
}
console.log(obj.getName()) // result ?
Wrong Answer: "Viktor"
Right Answer: undefined
설명
화살표 함수는 자신의 this를 바인딩하지 않고, 대신 this에 액세스하면 외부에서 가져오고 "lexical scoping"이라고 하는 상위 범위에서 상속합니다. this를 전역 컨텍스트에서 사용하면 브라우저의 창 개체와 노드의 전역 개체를 참조합니다.
이 문제를 해결할 수 있는 한 가지 가능한 솔루션으로 일반 함수를 사용하십시오.
const obj = {
name: "Viktor",
getName: function () {
return this.name
}
}
2. Const 선언
const score = 10;
if (score < 100) {
const result = "Not Passed";
}
console.log('result', result);
Wrong answer: "Not Passed”, undefined, null
Right Answer: ReferenceError: result is not defined
설명
상수는 블록 범위입니다.
그렇다면 블록이란 무엇입니까? 블록(즉, 코드 블록)은 중괄호({...}) 쌍을 사용하여 정의하는 코드 섹션입니다. 이 같은:
//outer block scope
{//inner block-scope
const name = "Viktor";
}
//outer block scope
const로 선언된 모든 변수는 블록 수준 범위를 가지며 선언된 문장이나 표현식으로 범위를 제한합니다. 따라서 우리의 경우 외부 범위는 내부 범위에서 정의된 값을 읽을 수 없습니다(var로 정의된 경우 제외).
3. setImmediate() 대 setTimeout()
// timeout_vs_immediate.js
setTimeout(() => {
console.log('timeout');
}, 0);
setImmediate(() => {
console.log('immediate');
});
$ node timeout_vs_immediate.js
어떤 결과가 출력될까요?
Wrong answer:
timeout
immediate
AND
immediate
timeout
Right Answer: The output of the above is not predictable
설명:
타이머가 실행되는 순서는 타이머가 호출되는 컨텍스트에 따라 달라집니다. 둘 다 기본 모듈 내에서 호출되는 경우(I/O 주기 내에 있지 않은 경우) 두 타이머가 실행되는 순서는 프로세스의 성능에 의해 제한되므로 비결정적입니다.
그러나 I/O 주기 내에서 두 호출을 이동하면 즉시 콜백이 항상 먼저 실행됩니다.
// timeout_vs_immediate.js
const fs = require('fs');
fs.readFile(__filename, () => {
setTimeout(() => {
console.log('timeout');
}, 0);
setImmediate(() => {
console.log('immediate');
});
});
$ node timeout_vs_immediate.js
immediate
timeout
4. 루프 내부의 클로저
for(var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 10);
}
무엇이 기록됩니까?
Wrong answer: 0,1,2,3,4,5,6,7,8,9
Right answer: 10,10,10,10,10,10,10,10,10,10 //ten 10 times
설명:
콘솔 로그는 비동기 setTimeout 함수 안에 있으며 setTimeout은 현재 스택이 끝나면 실행됩니다. 따라서 루프가 종료되고 setTimeout이 실행됩니다. 루프가 이미 완료되었으므로 값 i는 10으로 설정되었습니다. setTimeout이 i 값을 참조로 사용하면 i 값이 10이 되므로 이를 기준으로 10이 10번 기록됩니다.
5. ..toString()
2022..toString() // result ?
Wrong answer: SyntaxError: Invalid or unexpected token
Right answer: "2022"
설명:
첫 번째 점은 실제로 소수점이고 두 번째 점은 속성 또는 메서드를 호출하므로 2022..toString()은 2022.0.toString()의 짧은 버전입니다.
나는 그것이 당신에게 흥미로웠고 당신이 새로운 것을 배웠기를 바랍니다.
건배,
빅토르
Reference
이 문제에 관하여(Js 연습 면접 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vkkis93/js-practice-interview-questions-44h9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)