본문 바로가기
학습정리/자습

패스트캠퍼스 Javascirpt 퀴즈 정리 3)

by sunnykim91 2019. 8. 13.

1. 아래코드의 실행 결과는?

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

const member = new Person('Ungmo', 'Lee');

Person.getFullName = function () {
    return `${this.firstName} ${this.lastName}`;
};

console.log(member.getFullName());

TypeError 이다. 

 

먼저 위쪽 Person은 새로운 객체를 생성하는 함수이다.

 

getFullName이라고하는 정적메소드는 인스턴스 없어도 된다.

하지만 프로퍼티 같은 경우에는 인스턴스가 있어야한다.

 

콘솔에서의 member식별자의 getfullName은 프로퍼티를 나타내기 때문에 

사실상 member.undefined가 되는 것이다. 따라서 undefined를 호출하게되면 타입에러가 나게 된다.

 

2. 아래코드의 실행 결과는?

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

const member = new Person('Ungmo', 'Lee');

Person.getFullName = function () {
    return `${this.firstName} ${this.lastName}`;
};

console.log(Person.getFullName());

1번과 다르게 member가 아닌 Person을 물어보고 있다.

Person의 getFullName에서의 리턴값에 있는 this는 Person은 가르킨다. 따라서 아무것도 없는 undefined undefined가 된다.

 

 

3. 아래코드의 실행 결과는?

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

const lee = Person('Ungmo', 'Lee');

console.log(lee);

결과값은 undefined이다.

const lee = Person ...  <-- 이 문은 return값을 지정해 주지 않은 것과 같기 때문이다.

 

만약, new연산자를 붙인다면,

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

const lee = new Person('Ungmo', 'Lee');

console.log(lee);

답은 

Person { firstName: 'Ungmo', lastName: 'Lee' } 로 잘 나오게 될것이다.

 

 

4. 이벤트 전파의 3단계는?

캡쳐링 -> 타겟 -> 버블링

 

5. 모든 객체는 프로토타입을 갖고 있나요?

아닙니다. 하나빼고..다 있는데 ㅠㅠ

 Object.prototype = null 입니다.

 

6. 아래코드의 실행결과는?

function sum(a, b) {
    return a + b;
}

console.log(sum(1, '2'));

숫자와 문자를 더하여져서 3이되는것이아니라 12가 된다. 

 

7. 아래코드의 실행결과는?

let number = 0;
console.log(number++);
console.log(++number);
console.log(number);

0 2 2 이다.

첫번째는 0 을 출력하고 1을 더함

두번째는 1에서 1을 더하고 출력함 

세번째는 2인 넘버를 출력해줌

 

8. 아래코드의 실행결과는?

function checkAge(data) {
    if (data === { age: 18 }) {
        console.log('You are an adult!');
    } else if (data == { age: 18 }) {
        console.log('Tou are still an adult.');
    } else {
        console.log('Gmm.. Tou dont hava an age I guess');
    }
}

checkAge({ age: 18});

3번째 콘솔이 찍힌다.

이유는 checkAge의 파라미터로 받은 data와 if문안에 있는 객체는 전혀 다른 별개의 객체이기 때문이다.

그래서 첫번째 if문은 넘어간다.

두번째 if문에서 그럼 값은 같느냐고 물어보지만, 내용은 같아도 참조값이 다르기때문에 두번째 if문도 패스

그래서 세번째 else문에서 출력된다.

 

9. 아래코드의 실행결과는?

function getAge(...args) {
    console.log(typeof args);
}
getAge(20);

일단

20이 ...라는 스프레드 연산자를 만나 배열이 됩니다.

따라서 getAge안에서 console.log(args)만 찍어봐도 [20] 이라는 배열이 됩니다.

배열의 타입은 Array가 맞지만, array라는 것이 없고 object로 표시가 되어 답은 오브젝트!

 

 

10. 아래코드의 실행결과는?

function getAge() {
    'use strict';
    age = 20;
    console.log(age);
}
getAge();

엄격모드를 사용하게되면 age 앞에 키워드가 없다.

따라서 age를 찾을 수 없다는 뜻의 refer에러가 뜬다.

반응형