> 类库下载 > java类库 > 가장 많이 묻는 JavaScript 프론트엔드 인터뷰 질문 10가지

가장 많이 묻는 JavaScript 프론트엔드 인터뷰 질문 10가지

高洛峰
풀어 주다: 2016-10-12 14:17:13
원래의
1869명이 탐색했습니다.

이런 유형의 인터뷰에 동의하지 않는 사람들이 많다는 것을 알고 있습니다. 사실, 당신이 좋든 싫든 그것을 받아들여야 합니다. 특히 독학을 하고 첫 직장에 지원하는 경우에는 더욱 그렇습니다.

이 외에도 Github/프로젝트 주소가 이상적인 증명 방법일 수 있지만 모든 방법에 의존하지는 마세요.

좋은 소식은 제한된 시간 내에 답변할 수 없는 어려운 질문(이벤트 루프, 양희삼각형 등)이 있고, 다른 면접 지원자도 인정한 부분이 있다는 것입니다. 답변을 하면 토론이 훨씬 쉬워질 것입니다.

나쁜 소식은 일부 인터뷰에서는 나중에 피드백이 없다는 것입니다. 세 회사에는 다시 연락이 닿지 않았습니다. 이 클릭은 자신감을 파괴하고 무례합니다. 그러다가 '인터뷰가 너무 잘 됐지?', '내 타입이 마음에 안 드나?' 등 심리적인 어려움을 겪을 수도 있다. 따라서 당신이 면접관이라면 면접관에게 명확한 대답을 하십시오. 자동 응답이라도 아무것도 없는 것보다는 낫습니다.

1. n번째 행에 양희삼각형을 반환하는 함수를 설계합니다. (인터뷰 전체 질문은 한 가지입니다)

참고* 양희의 삼각형은 파스칼의 삼각형이라고도 합니다

1

1 1 1

1 2 1

1 3 3 1

...

2. 문자열을 반환하려면 에서 가장 많이 반복되는 단어입니다.

3. 재귀를 사용하여 길이 n의 피보나치 수열을 인쇄합니다.

참고* 피보나치 수열은 0과 1로 시작하고 이전 두 숫자인 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233

4. 바인드, 적용, 호출의 사용법과 차이점을 설명하세요.

5. 이벤트 위임이 무엇이며 왜 유용한지 설명하세요.

6. 이벤트 루프란?

7. JavaScript에서 호이스팅(선언 호이스팅)은 어떻게 작동하나요?

8.

9. JavaScript나 브라우저에 가장 추가하고 싶은 기능은 무엇이며 그 이유는 무엇입니까?

10. 함수형 프로그래밍과 명령형 프로그래밍의 차이점은 무엇인가요? 당신은 어느 것을 좋아합니까?

전형적인 프론트엔드 면접 질문 5가지

질문 1: 범위 범위


다음 코드를 고려해보세요.

(function() {
   var a = b = 5;
})();

console.log(b);
로그인 후 복사

콘솔에 무엇이 인쇄될까요?



위 코드는 5를 출력합니다.

이 문제의 비결은 두 개의 변수 선언이 있지만 a는 var 키워드를 사용하여 선언된다는 것입니다. 함수의 지역 변수임을 나타냅니다. 대조적으로, b는 전역 변수가 됩니다.

이 질문의 또 다른 요령은 엄격 모드를 사용하지 않는다는 것입니다('use strict';). 엄격 모드가 활성화되면 코드는 ReferenceError: b가 정의되지 않음을 발생시킵니다. 엄격 모드에서는 전역 변수 선언을 구현하기 위해 명시적인 사양이 필요하다는 점을 기억하세요. 예를 들어 다음과 같이 작성해야 합니다.

(function() {
   'use strict';
   var a = window.b = 5;
})();

console.log(b);
로그인 후 복사

질문 2: "네이티브" 메서드


를 생성하여 문자열 개체에 대한 반복 함수를 정의합니다. 정수 n을 전달하면 문자열을 n번 반복한 결과를 반환합니다. 예를 들어

console.log('hello'.repeatify(3));
로그인 후 복사

는 helloellohello를 인쇄해야 합니다.


답변

가능한 구현은 다음과 같습니다.

String.prototype.repeatify = String.prototype.repeatify || function(times) {
   var str = '';
   for (var i = 0; i < times; i++) {
      str += this;
   }
   return str;
};
로그인 후 복사

현재 질문은 JavaScript 상속 및 프로토타입에 대한 개발자의 지식을 테스트합니다. 이는 또한 개발자가 내장 객체를 확장하는 방법을 알고 있는지도 확인합니다(이렇게 하면 안 되더라도).

여기서 또 다른 중요한 점은 이미 정의되어 있는 기능을 재정의하지 않는 방법을 알아야 한다는 것입니다. 이전에 함수 정의가 존재하지 않았는지 테스트합니다.

String.prototype.repeatify = String.prototype.repeatify || function(times) {/* 여기에 코드 */};


이 기술은 JavaScript 기능을 호환되게 만들라는 요청을 받을 때 특히 유용합니다.

질문 3: 명령문 호이스팅


이 코드를 실행하면 무엇이 출력되나요?

function test() {
   console.log(a);
   console.log(foo());
   var a = 1;
   function foo() {
      return 2;
   }
}

test();
로그인 후 복사

답변

이 코드의 결과는 unundefined이고 2입니다.

이유는 변수 및 함수의 선언은 앞으로(함수 상단으로 이동) 이동하지만, 변수에는 아무런 값이 할당되지 않기 때문입니다. 따라서 변수를 인쇄할 때 해당 변수는 함수에 존재하지만(선언된) 여전히 undefine 상태입니다. 즉, 위의 코드는 다음과 동일합니다.

function test() {
   var a;
   function foo() {
      return 2;
   }
 
   console.log(a);
   console.log(foo());
    
   a = 1;
}
 
test();
로그인 후 복사

질문 4: JavaScript에서는 어떻게 작동하나요?


下面的代码会输出什么结果?给出你的答案。

var fullname = &#39;John Doe&#39;;
var obj = {
   fullname: &#39;Colin Ihrig&#39;,
   prop: {
      fullname: &#39;Aurelio De Rosa&#39;,
      getFullname: function() {
         return this.fullname;
      }
   }
};

console.log(obj.prop.getFullname());
 
var test = obj.prop.getFullname;
 
console.log(test());
로그인 후 복사

回答 

答案是Aurelio De Rosa和John Doe。原因是,在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的。 

在第一个 console.log()调用中,getFullname() 被调用作为obj.prop对象的函数。所以,上下文指的是后者,函数返回该对象的fullname。与此相反,当getFullname()被分配到test变量时,上下文指的是全局对象(window)。这是因为test是被隐式设置为全局对象的属性。出于这个原因,该函数返回window的fullname,即定义在第一行的那个值。 

问题5:call() 和 apply()


现在让你解决前一个问题,使最后的console.log() 打印 Aurelio De Rosa。 

回答 

该问题可以通过强制使用 call() 或者 apply() 改变函数上下文。在下面我将使用call(),但在这种情况下,apply()会输出相同的结果: 

console.log(test.call(obj.prop))


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿