JavaScript 인터뷰 코딩 질문 - 3
1에서 n 사이의 숫자의 총합을 계산하는 재귀 함수를 작성하시겠습니까?
n
는 함수의 매개변수가 됩니다. 따라서 종점인 1
에 도달할 때까지 이 계산기 함수를 호출해야 합니다. 따라서 가능한 효과적인 솔루션 중 하나는 코드 아래에 있습니다.function calculateTotal(number, total = 1) {
return number > 1 ?
calculateTotal(number - 1, total + number) :
total;
}
console.log(calculateTotal(10));
아래에서 코드를 검사할 수 있습니다.
재귀 계승 계산기 함수를 작성하세요.
아래와 같이 계승 계산에 동일한 논리를 쉽게 적용할 수 있습니다.
function factorial(number, product = 1) {
return number > 0 ?
factorial(number - 1, product * number) :
product;
}
console.log(factorial(5));
!! 위의 재귀 함수는 큰 입력에 대해 스택 오버플로 오류를 일으킵니다. 이를 방지하기 위해 아래와 같이 Trampoline Pattern을 사용할 수 있습니다.
// recursive optimization to prevent stack overflow error
function trampoline(fn) {
return (...args) => {
let result = fn(...args);
while (typeof result === 'function') {
result = result();
}
return result;
};
}
// Write a recursive function to calculate the total of numbers between 1 to n?
function calculateTotal(number, total = 1) {
return number > 1 ?
() => calculateTotal(number - 1, total + number) :
total;
}
const totalCalculator = trampoline(calculateTotal);
console.log(totalCalculator(100000));
// Write a recursive factorial calculator function
function factorial(number, product = 1) {
return number > 0 ?
() => factorial(number - 1, product * number) :
product;
}
const factorialCalculator = trampoline(factorial);
console.log(factorialCalculator(100));
아래에서 코드를 검토할 수 있습니다.
<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@hco/Recursion?lite=true"loading="게으른"/>
이것은 자바스크립트 배열의 뮤테이터 메소드에 관한 것입니다. 변수의 불변성은 함수형 프로그래밍에서 중요한 주제입니다.
var arr = [1, 2, 3, 7, 4];
// Which of the followings will mutate variables?
// Find a functional alternative for mutator ones.
arr.push(5); => mutator
arr.shift(); => mutator
arr.concat(6, 7); => non-mutator
arr.map(a => a * a); => non-mutator
arr.sort(); => mutator
그리고 이것들은 돌연변이 유발자를 위한 대체 솔루션이 될 수 있습니다.
var arr = [1, 2, 3, 7, 4];
// Which of the followings will mutate variables?
// Find a functional alternative for mutator ones.
arr.push(5); => arr.concat(5);
arr.shift(); => arr.slice(1);
arr.concat(6, 7); => non-mutator
arr.map(a => a * a); => non-mutator
arr.sort(); => arr.concat().sort()
아래에서 코드를 검토할 수 있습니다.
<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@hco/Functional-Programming?lite=true"로딩="게으른"/>
이것은 프로토타입 상속에 대한 당신의 이해를 점검하기 위한 것입니다.
function Person() {}
// 1st definition for 'sayHi' method
Person.prototype.sayHi = function () {
console.log('Hi!');
};
var person = new Person();
// What will be the printed message?
person.sayHi();
// 2nd definition for 'sayHi' method
Person.prototype.sayHi = function () {
console.log('Hello!');
};
// What will be the printed message?
person.sayHi();
// What will be returned?
person.hasOwnProperty('sayHi');
출력은 다음과 같습니다.
Hi!
Hello!
false
person
함수에 메서드가 없기 때문에 개체에 고유한 sayHi()
메서드가 없습니다. Person
키워드로 개체를 인스턴스화하면 함수의 모든 new
메서드를 prototype
속성으로 상속합니다. 따라서 __proto__
의 첫 번째 실행에서 정의된 것이 로깅sayHi()
이므로 실행됩니다. 그러나 Hi!
의 두 번째 정의 후에 더 새로운 것이 호출됩니다. sayHi()
는 프로토타입 상속으로 인해 동일한 기능을 가리키기 때문입니다. 마지막으로 person.sayHi()
는 person.hasOwnProperty('sayHi')
를 반환합니다. 이것은 false
객체의 속성이 아니기 때문에 프로토타입 체인에 의해 상속됩니다.
아래에서 코드를 검토할 수 있습니다.
<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@hco/Prototypal-Inheritance?lite=true"로딩="게으른"/>
나의 다른 기사:
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 — 1
Halil Can Ozcelik ・ 1월 4일 ・ 2분 읽기
<사업부 클래스="ltag__link">
JavaScript 인터뷰 코딩 질문 — 2
Halil Can Ozcelik ・ 1월 6일 ・ 2분 읽기
<사업부 클래스="ltag__link">
React Context API로 다국어 웹사이트 만들기
Halil Can Ozcelik ・ 11월 7일 '19 ・ 3분 읽기
Reference
이 문제에 관하여(JavaScript 인터뷰 코딩 질문 - 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/halilcanozcelik/javascript-interview-coding-questions-3-13gn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)