>  기사  >  웹 프론트엔드  >  5가지 고전적인 JavaScript 인터뷰 질문_javascript 기술

5가지 고전적인 JavaScript 인터뷰 질문_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:34:141405검색

1: 범위

코드 복사 코드는 다음과 같습니다.

(함수() {
var a = b = 5;
})();
console.log(b);

콘솔에는 무엇이 인쇄되나요?

답변

위 코드는 5를 인쇄합니다.

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

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

코드 복사 코드는 다음과 같습니다.

(함수() {
'엄격한 사용';
var a = window.b = 5;
})();

console.log(b);

2: "네이티브" 메소드 생성

문자열 객체에 대한 반복 기능을 정의합니다. 정수 n을 전달하면 문자열을 n번 반복한 결과를 반환합니다. 예:

코드 복사 코드는 다음과 같습니다.

console.log('hello'.repeatify(3));

helloellohello를 인쇄해야 합니다.

답변

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

코드 복사 코드는 다음과 같습니다.

String.prototype.repeatify = String.prototype.repeatify || 함수(회) {
var str = '';
for (var i = 0; i < times; i ) {
       str = this;
}
문자열 반환
};

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

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

코드 복사 코드는 다음과 같습니다.

String.prototype.repeatify = String.prototype.repeatify || 함수(회) {/* 여기에 코드 */};

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

3: 명령문 게양

이 코드를 실행하면 어떤 결과가 출력될까요?

코드 복사 코드는 다음과 같습니다.

함수 테스트() {
console.log(a);
console.log(foo());
var a = 1;
함수 foo() {
2개 반납;
}
}

10: 테스트();

답변

이 코드의 결과는 정의되지 않았으며 2입니다.

이유는 변수와 함수의 선언은 앞으로 가져오지만(함수 상단으로 이동) 변수에 값이 할당되지 않기 때문입니다. 따라서 변수를 인쇄할 때 함수에 존재하지만(선언된) 여전히 정의되지 않은 상태입니다. 즉, 위 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

함수 테스트() {
var a;
함수 foo() {
2개 반납;
}

console.log(a);
console.log(foo());

a = 1;
}

테스트();

4: JavaScript에서 이것이 작동하는 방식

다음 코드는 무엇을 출력합니까? 답을 주십시오.

코드 복사 코드는 다음과 같습니다.

var fullname = 'John Doe';
var obj = {
이름: 'Colin Ihrig',
; 소품: {
        전체 이름: 'Aurelio De Rosa',
        getFullname: function() {
            this.fullname을 반환하세요.
}
}
};

console.log(obj.prop.getFullname());

var test = obj.prop.getFullname;

console.log(test());

답변

답은 Aurelio De Rosa와 John Doe입니다. 그 이유는 함수에서 이것의 동작은 정의된 방식뿐만 아니라 JavaScript 함수가 호출되고 정의된 방식에 따라 달라지기 때문입니다.

첫 번째 console.log() 호출에서는 getFullname()이 obj.prop 객체의 함수로 호출됩니다. 따라서 컨텍스트는 후자를 참조하고 함수는 개체의 전체 이름을 반환합니다. 반면, 테스트 변수에 getFullname()을 할당하면 컨텍스트는 전역 개체(창)를 참조합니다. 이는 test가 암시적으로 전역 개체의 속성으로 설정되기 때문입니다. 이러한 이유로 함수는 첫 번째 줄에 정의된 값인 창의 전체 이름을 반환합니다.

5: 호출() 및 적용()

이제 최종 console.log()가 Aurelio De Rosa를 인쇄하도록 이전 문제를 해결해 보겠습니다.

답변

이 문제는 call() 또는 apply()를 사용하여 함수 컨텍스트를 변경함으로써 변경될 수 있습니다. 아래에서는 call()을 사용하지만 이 경우 apply()는 동일한 결과를 출력합니다.

코드 복사 코드는 다음과 같습니다.

console.log(test.call(obj.prop));
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.