JavaScript 인터뷰 코딩 질문 - 4
이것은 Arrow & Regular 함수 정의의 범위 차이에 관한 것입니다.
// 1. What will be logged? Why?
const module1 = {
x: 55,
getX: function () {
console.log('x:', this.x);
}
};
const module2 = {
x: 55,
getX: () => {
console.log('x:', this.x);
}
};
(function() {
this.x = 66;
module1.getX();
module2.getX();
})();
콘솔 출력은 다음과 같습니다.
x: 55
x: 66
this
는 일반 함수에서 래퍼 개체를 참조하므로 첫 번째 예에서 this.x
는 래퍼x
개체의 속성을 기록합니다module1
. 반면 화살표 함수는 자신의 범위를 바인딩하지 않고 부모 범위(이 경우에는 Window
또는 global
개체)에서 상속합니다.아래에서 테스트할 수 있습니다.
같은 문제를 다른 예에서 살펴보겠습니다.
// 2. What will be logged? Why?
const message1 = {
hello : 'Hello',
names : ['Sue', 'Joe'],
showMessage: function () {
this.names.forEach(function(name) {
console.log(`${this.hello} ${name}`);
});
}
}
message1.showMessage();
const message2 = {
hello : 'Hello',
names : ['Sue', 'Joe'],
showMessage: function () {
this.names.forEach(name => {
console.log(`${this.hello} ${name}`);
});
}
}
message2.showMessage();
콘솔 출력은 다음과 같습니다.
undefined Sue
undefined Joe
Hello Sue
Hello Joe
message1
에서 this.names.forEach
내부의 함수는 일반 함수로 정의되어 있으므로 this
는 기본적으로 전역 객체(브라우저의 경우 Window
, Node.js의 경우 global
)와 동일하며 hello
재산. this
는 엄격 모드에서 기본적으로 undefined
와 같습니다!
한편, message2
에서는 this.names.forEach
내부의 함수를 화살표 함수로 정의한다. 화살표 함수에는 자체 범위가 없으므로 소유자(이 경우 showMessage
) 범위와 같습니다. showMessage
의 범위는 래퍼 객체message2
입니다. 이러한 이유로 hello
를 사용하여 message2
의 this.hello
속성에 도달할 수 있습니다.
아래에서 테스트할 수 있습니다.
<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@hco/Arrow-vs-Regular-Functions?lite=true"loading="게으른"/>
이 질문은 JavaScript에서 Promise에 대한 지식을 평가하기 위한 것입니다.
const promiser = ms => new Promise((resolve, reject) => {
setTimeout(() => { resolve('wait wait..') }, ms)
});
const timeout = new Promise((resolve, reject) => {
setTimeout(() => { resolve('timeout!') }, 2000)
});
const race1 = Promise.race([promiser(1000), timeout]);
const race2 = Promise.race([promiser(3000), timeout]);
// What will be the output?
race1.then(res => console.log('race1:', res))
.catch(err => console.log('race1:', err));
// What will be the output?
race2.then(res => console.log('race2:', res))
.catch(err => console.log('race2:', err));
결과는 다음과 같습니다.
race1: wait wait..
race2: timeout!
Promise.race()
는 더 빨리 이행하거나 거부하는 승자 약속을 반환합니다. 우리timeout
의 약속은 2초 안에 해결됩니다. promiser
는 해결 시간을 매개변수로 사용합니다. 첫 번째 경주에서는 1초만에 해결되어 경주에서 이기지만, 두 번째 경주에서는 매개변수로 3초가 걸리므로 timeout
가 먼저 해결됩니다.
아래에서 테스트할 수 있습니다.
<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@hco/Promise-Race?lite=true"loading="게으른"/>
이 시리즈의 이전 기사는 아래 링크에서 읽을 수 있습니다.
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 — 1
Halil Can Ozcelik ・ 1월 4일 ・ 2분 읽기
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 — 2
Halil Can Ozcelik ・ 1월 6일 ・ 2분 읽기
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 - 3
Halil Can Ozcelik ・ 1월 7일 ・ 3분 읽기
Reference
이 문제에 관하여(JavaScript 인터뷰 코딩 질문 - 4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/halilcanozcelik/javascript-interview-coding-questions-4-1fo7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)