-
2023 - 06 - 11 자바스크립트 30문제 및 답Today I Learned/TIL 06 2023. 6. 9. 14:59
JS 객관식 문제
문제 1. 자바스크립트의 동적 타이핑이란 무엇을 의미하는가요?
- 모든 변수 타입이 동일하다는 것
- 변수의 타입이 런타임 시점에 결정된다는 것
- 변수의 타입이 프로그램이 실행되는 동안에 변경될 수 없다는 것
- 변수를 선언할 때 반드시 타입을 지정해야 한다는 것
문제 2. 자바스크립트에서 var로 선언된 변수는 어떻게 작동하나요?
- 같은 이름의 변수를 여러 번 선언하면 오류가 발생한다.
- 선언 후에 값을 변경할 수 없다.
- 같은 이름의 변수를 여러 번 선언해도 오류가 발생하지 않고, 가장 마지막에 선언한 값으로 변수가 덮어씌워진다.
- var로 선언된 변수는 메모리에 저장되지 않는다.
문제 3. 자바스크립트에서 const로 선언된 변수에 대한 설명 중 틀린 것은 무엇인가요?
- const는 선언 후에 값을 변경할 수 없는 상수를 선언할 때 사용된다.
- 같은 이름의 변수를 두 번 선언하면 오류가 발생한다.
- const로 선언된 변수는 값을 변경할 수 있다.
- const는 ES6에서 새로 도입된 변수 선언 방법이다.
문제 4. "Hello" / 2의 결과값은 무엇인가요?
- 2
- "Hello2"
- NaN
- undefined
문제 5. 자바스크립트에서 find() 메서드가 주어진 함수를 만족하는 배열의 첫 번째 요소를 반환하는 다음 예제를 참고하세요.
let array = [5, 12, 8, 130, 44]; let found = array.find(element => element > 10);
이 코드에서 found 변수의 값은 어떻게 될까요?
- 5
- 12
- 8
- 130
find함수는 조건에해당하는 배열의 첫번째 인덱스값만 담는다.
문제 6. 다음 코드의 출력 결과는 무엇일까요?
function add(x, y) { return x + y; } console.log(add(2, 3));
- 2
- 3
- 5
- undefined
문제 7. 주어진 배열의 모든 요소를 제곱하여 새로운 배열을 생성하는 코드는 다음 중 어떤 것인가요?
- transformedArray = array.map(num => num * num);
- transformedArray = array.filter(num => num * num);
- transformedArray = array.reduce((acc, num) => acc + num * num, []);
- transformedArray = array.slice().map(num => num * num);
map함수는 "새로운 배열"을 만든다.
문제 8. 다음 코드의 출력 결과는 무엇일까요?
let square = x => x * x; console.log(square(3));
- 3
- 6
- 9
- undefined
문제 9. do...while문이 하는 일은 무엇인가요?
- 초기값, 조건식, 증감식을 사용하여 반복 횟수를 제어한다.
- 일단 한 번은 코드를 실행하고, 그 후에 조건식을 체크하여 반복 여부를 결정한다.
- 조건식이 참인 경우에만 코드를 반복해서 실행한다.
- 객체의 프로퍼티를 순서대로 접근한다.
문제 10. 아래 코드의 출력 결과는 무엇인가요?
let count = 0; while (count < 5) { console.log(count); count++; if (count === 3) { break; } }
- 0
- 0 1
- 1 2
- 0 1 2
문제 11. 아래 코드의 출력 결과는 무엇인가요?
const person = { name: "John", age: 30, city: "New York" }; const entries = Object.entries(person); console.log(entries);
- ["name", "John"], ["age", 30], ["city", "New York"]
- ["name: John", "age: 30", "city: New York"]
- ["John", 30, "New York"]
- 오류 발생
문제 12. 다음 코드에서 함수와 관련된 내용을 고르세요.
const numbers = [1, 2, 3, 4, 5]; const doubledNumbers = numbers.map(num => num * 2); console.log(doubledNumbers);
- numbers 배열의 각 요소를 2배로 만들어서 새로운 배열 doubledNumbers를 생성합니다.
- numbers 배열에서 짝수인 요소만 필터링하여 새로운 배열 doubledNumbers를 생성합니다.
- numbers 배열에서 인덱스 1부터 4까지의 요소를 추출하여 새로운 배열 doubledNumbers를 생성합니다.
- numbers 배열을 그대로 복사하여 새로운 배열 doubledNumbers를 생성합니다.
map함수는 "새로운 배열"을 만든다.
문제 13. 다음 코드에서 삼항 연산자와 관련된 내용을 고르세요.
const num = 10; const result = num > 5 ? 'Greater than 5' : 'Less than or equal to 5'; console.log(result);
- num 변수가 5보다 크다면 'Greater than 5' 문자열을, 그렇지 않다면 'Less than or equal to 5' 문자열을 result 변수에 할당합니다.
- num 변수가 5보다 작다면 'Greater than 5' 문자열을, 그렇지 않다면 'Less than or equal to 5' 문자열을 result 변수에 할당합니다.
- num 변수가 5보다 크다면 true를, 그렇지 않다면 false를 result 변수에 할당합니다.
- num 변수가 5보다 작다면 true를, 그렇지 않다면 false를 result 변수에 할당합니다.
문제 14. 다음 코드에서 구조 분해 할당(Destructuring Assignment)과 관련된 내용을 고르세요.
const person = { name: 'John', age: 30, country: 'USA' }; const { name, age, country } = person; console.log(name, age, country);
- person 객체의 name, age, country 속성을 각각 변수 name, age, country에 할당합니다.
- person 객체의 name, age, country 속성을 배열로 할당하고, 순서대로 변수 name, age, country에 할당합니다.
- person 객체의 속성 중에서 name, age, country만을 선택하여 새로운 객체를 생성합니다.
- person 객체의 속성 중에서 name, age, country만을 선택하여 새로운 배열을 생성합니다.
여기서 변수는 key값이고, 속성은 value값이다.
name, age, country 라는 key값에 john, 30, USA라는 value값이 할당된다.
문제 15. 다음 코드에서 단축 속성명(Shorthand Property Name)과 관련된 내용을 고르세요.
const name = 'John'; const age = 30; const person = { name, age, country: 'USA' }; console.log(person);
- name과 age 변수의 값을 각각 person 객체의 name과 age 속성으로 할당합니다.
- person 객체의 name과 age 속성을 각각 name과 age 변수의 값으로 초기화합니다.
- person 객체의 name과 age 속성을 name: name, age: age와 같이 명시적으로 할당합니다.
- person 객체의 속성 중에서 name과 age 속성만을 선택하여 새로운 객체를 생성합니다.
문제 16. 다음 코드에서 전개 구문(Spread Syntax)과 관련된 내용을 고르세요.
const numbers = [1, 2, 3]; const moreNumbers = [4, 5, 6]; const combinedNumbers = [...numbers, ...moreNumbers]; console.log(combinedNumbers);
- numbers 배열과 moreNumbers 배열의 모든 요소를 병합하여 새로운 배열 combinedNumbers를 생성합니다.
- numbers 배열과 moreNumbers 배열의 첫 번째 요소를 병합하여 새로운 배열 combinedNumbers를 생성합니다.
- numbers 배열과 moreNumbers 배열을 병합하여 numbers 변수에 할당합니다.
- numbers 배열과 moreNumbers 배열을 순서대로 출력합니다.
문제 17. 다음 코드에서 나머지 매개변수(Rest Parameter)와 관련된 내용을 고르세요.
function sum(...numbers) { return numbers.reduce((acc, num) => acc + num, 0); } const result = sum(1, 2, 3, 4, 5); console.log(result);
- sum 함수는 임의 개수의 인수를 받아서 모두 더한 값을 반환합니다.
- sum 함수는 첫 번째 인수와 나머지 인수들을 더한 값을 반환합니다.
- sum 함수는 나머지 인수들을 배열로 받아서 모두 더한 값을 반환합니다.
- sum 함수는 첫 번째 인수를 제외한 나머지 인수들을 모두 더한 값을 반환합니다.
앞에 ... 붙은건 나머지매개변수 (레스트 파라미터) 즉 임의 개수의 인수를 받아 모두 더한값(reduce) 반환한다.
문제 18. 다음 코드에서 템플릿 리터럴(Template Literal)과 관련된 내용을 고르세요.
const name = 'John'; const age = 30; const message = `My name is ${name} and I am ${age} years old.`; console.log(message);
- message 변수에 템플릿 리터럴을 사용하여 문자열을 할당합니다.
- name과 age 변수의 값을 문자열에 삽입하기 위해 템플릿 리터럴을 사용합니다.
- name과 age 변수를 이용하여 문자열을 연결하기 위해 템플릿 리터럴을 사용합니다.
- name과 age 변수의 값을 연산하여 message 변수에 할당합니다.
문제 19. 다음 코드에서 자료구조 Map과 Set과 관련된 내용을 고르세요.
const myMap = new Map(); myMap.set('key1', 'value1'); myMap.set('key2', 'value2'); myMap.set('key3', 'value3'); const mySet = new Set(); mySet.add('value1'); mySet.add('value2'); mySet.add('value3'); console.log(myMap.size); console.log(mySet.size);
- myMap은 키와 값의 쌍을 저장하는 자료구조로, set 메서드를 사용하여 값을 저장합니다.
- mySet은 중복을 허용하지 않는 값들의 집합을 저장하는 자료구조로, add 메서드를 사용하여 값을 저장합니다.
- myMap.size는 myMap에 저장된 키-값 쌍의 개수를 반환합니다.
- mySet.size는 mySet에 저장된 값의 개수를 반환합니다.
모두 정답.
문제 20. 다음 중 bind 메서드와 call 메서드의 차이점은 무엇인가요?
- bind 메서드는 함수를 호출하지 않고 새로운 함수를 생성하며, call 메서드는 함수를 호출합니다.
- bind 메서드는 함수에 인자를 전달할 수 있지만, call 메서드는 인자를 전달할 수 없습니다.
- bind 메서드는 함수를 즉시 실행하고, call 메서드는 함수를 나중에 실행합니다.
- bind 메서드는 함수의 컨텍스트를 변경하고, call 메서드는 함수의 인자를 변경합니다.
Call매서드, Apply매서드, Bind매서드 모두 명시적으로 this바인딩을 할 때 사용한다. Call매서드와 Apply매서드는 호출 주체인 함수를 즉시 실행한다. Bind매서드는 함수를 즉시 실행하지 않고 새로운 함수를 반환한다. Call매서드는 첫번째 인자는 this에 바인딩하고, 나머지 인자들은 호출할 함수의 매개변수로 전달한다. Apply매서드는 첫번째 인자는 this에 바인딩하고, 나머지 인자들은 배열로 받는다. Bind매서드는 함수를 즉시 실행하지 않고, 넘겨받은 인자를 바탕으로 새로운 함수를 반환한다.
문제 21. 다음 코드의 결과는 무엇일까요?
const obj = { name: "John", greeting: function() { console.log(`Hello, ${this.name}!`); } }; const obj2 = { name: "Alice" }; obj.greeting.bind(obj2)();
- "Hello, John!"이 출력됩니다.
- "Hello, Alice!"가 출력됩니다.
- "Hello, undefined!"가 출력됩니다.
- 에러가 발생합니다.
문제 22. 다음 코드의 실행 결과는 무엇일까요?
function greet(name, callback) { console.log(`Hello, ${name}!`); callback(); } function sayGoodbye() { console.log("Goodbye!"); } greet("John", sayGoodbye);
- "Hello, John!"이 출력되고, 그 다음에 "Goodbye!"가 출력됩니다.
- "Goodbye!"가 출력되고, 그 다음에 "Hello, John!"이 출력됩니다.
- "Hello, John!"과 "Goodbye!"가 동시에 출력됩니다.
- 에러가 발생합니다.
문제 23. 콜백지옥(callback hell)이란 무엇인가요?
- 콜백 함수의 연속적인 호출로 인해 코드가 복잡해지고 가독성이 떨어지는 상황을 말합니다.
- 콜백 함수가 비동기 작업을 처리하는 동안 발생하는 오류를 의미합니다.
- 콜백 함수가 무한히 재귀적으로 호출되어 스택 오버플로우가 발생하는 상황을 의미합니다.
- 콜백 함수가 실행되기 전에 다른 함수에 의해 변경되어 원하는 결과를 얻을 수 없는 상황을 말합니다.
문제 24. 다음 코드의 실행 결과는 무엇일까요?
const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve("Success!"); }, 2000); }); promise.then((result) => { console.log(result); });
- "Success!"가 2초 후에 출력됩니다.
- "Success!"가 즉시 출력됩니다.
- 에러가 발생하여 아무런 결과도 출력되지 않습니다.
- 코드가 실행되지 않고 종료됩니다.
문제 25. Promise 객체를 사용하는 주요한 이유는 무엇인가요?
- 비동기 작업을 더 효율적이고 간결하게 처리할 수 있습니다.
- 동기 작업에 대해서도 예외 처리를 할 수 있게 합니다.
- 콜백 함수보다 성능이 우수하고 가독성이 높은 코드를 작성할 수 있습니다.
- 여러 개의 값을 동시에 반환하고 처리할 수 있습니다.
문제 26. Promise 객체의 catch 메서드는 다음과 같은 상황에서 실행될까요?
- Promise 체인 중간에 발생하는 오류를 처리하기 위해 호출됩니다.
- Promise가 성공적으로 해결되었을 때 호출됩니다.
- Promise가 거부되었을 때 호출됩니다.
- Promise가 아직 해결되지 않은 상태일 때 호출됩니다.
try 실행, catch 거부되었을때
문제 27. 자바스크립트 비동기 처리의 내용 중, async와 await의 역할로 올바른 것은 무엇인가요?
- async는 함수 내에서 비동기적으로 실행되어야 하는 부분을 지정하고, await는 비동기 작업의 결과를 기다리는 역할을 합니다.
- async는 함수 내에서 동기적으로 실행되어야 하는 부분을 지정하고, await는 동기 작업의 결과를 기다리는 역할을 합니다.
- async와 await은 동일한 역할을 수행하며, 사용 방식만 다릅니다.
- async는 Promise 객체를 반환하고, await는 콜백 함수를 대기하는 역할을 합니다.
문제 28. 다음 코드의 실행 결과는 무엇일까요?
function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function getData() { await delay(2000); return "Data has been fetched!"; } async function main() { console.log("Start"); const result = await getData(); console.log(result); console.log("End"); } main();
- "Start", "Data has been fetched!", "End"가 순서대로 출력됩니다.
- "Start"가 출력되고, 2초 후에 "Data has been fetched!", 그 다음에 "End"가 출력됩니다.
- "Data has been fetched!"가 출력되고, 2초 후에 "Start", 그 다음에 "End"가 출력됩니다.
- 코드가 실행되지 않고 종료됩니다.
문제 29. 실행 컨텍스트는 무엇을 의미하는가?
- 코드의 환경 및 순서를 보장하기 위해 실행할 코드에 제공하는 환경 정보들을 모아놓은 객체이다.
- 코드의 실행 결과를 저장하는 객체이다.
- 코드 실행 중 발생하는 예외를 처리하는 객체이다.
- 실행 중인 함수의 스택 프레임을 나타내는 객체이다.
문제 30. 다음 코드의 실행 결과는 무엇일까요?
function outerFunction() { var outerVariable = "Hello"; function innerFunction() { console.log(outerVariable); } return innerFunction; } var closure = outerFunction(); closure();
- "Hello"가 출력됩니다.
- 에러가 발생하여 아무런 결과도 출력되지 않습니다.
- "undefined"가 출력됩니다.
- "outerVariable"이 출력됩니다.
'Today I Learned > TIL 06' 카테고리의 다른 글
2023 - 06 - 13 객체 리터럴 (Object literal), 프로퍼티 (Property), 매서드 (Method) (0) 2023.06.13 2023 - 06 - 12 동기 (Sync) & 비동기 (Async) 모델, Non-Blocking 모델, 프로미스 Promise, .then, Promise .catch, (0) 2023.06.11 2023 - 06 - 10 VScode 터미널에서 깃에 업데이트된 사항 가져오기 (0) 2023.06.08 2023 - 06 - 09 ★이중배열 (0) 2023.06.07 2023 - 06 - 08 댓글 CRUD 기능 4. Update (수정) (0) 2023.06.06