Skip to content

Commit a49f648

Browse files
committed
Translation 127 - 136 to ko-KR
1 parent deeebea commit a49f648

File tree

1 file changed

+364
-0
lines changed

1 file changed

+364
-0
lines changed

ko-KR/README-ko_KR.md

Lines changed: 364 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4078,3 +4078,367 @@ console.log(getFine(130, 300));
40784078
</p>
40794079
</details>
40804080
4081+
---
4082+
4083+
###### 127. 무엇이 출력 될까요?
4084+
4085+
```javascript
4086+
const spookyItems = ['👻', '🎃', '🕸'];
4087+
({ item: spookyItems[3] } = { item: '💀' });
4088+
4089+
console.log(spookyItems);
4090+
```
4091+
4092+
- A: `["👻", "🎃", "🕸"]`
4093+
- B: `["👻", "🎃", "🕸", "💀"]`
4094+
- C: `["👻", "🎃", "🕸", { item: "💀" }]`
4095+
- D: `["👻", "🎃", "🕸", "[object Object]"]`
4096+
4097+
<details><summary><b>답</b></summary>
4098+
<p>
4099+
4100+
#### 답: B
4101+
4102+
객체를 분해함으로써, 오른쪽 객체의 값을 꺼내고, 꺼낸 값은 왼쪽 객체에 같은 속성 이름의 값으로 할당 할 수 있어요. 이 경우, 값 "💀"을 `spookyItems[3]`에 할당했어요. 이건 `spookyItems`을 수정, 즉 배열에 "💀"을 추가한다는 의미예요. `spookyItems`을 출력하면, `["👻", "🎃", "🕸", "💀"]`이 출력ㅗ대요.
4103+
4104+
</p>
4105+
</details>
4106+
4107+
---
4108+
4109+
###### 128. 무엇이 출력 될까요?
4110+
4111+
```javascript
4112+
const name = 'Lydia Hallie';
4113+
const age = 21;
4114+
4115+
console.log(Number.isNaN(name));
4116+
console.log(Number.isNaN(age));
4117+
4118+
console.log(isNaN(name));
4119+
console.log(isNaN(age));
4120+
```
4121+
4122+
- A: `true` `false` `true` `false`
4123+
- B: `true` `false` `false` `false`
4124+
- C: `false` `false` `true` `false`
4125+
- D: `false` `true` `false` `true`
4126+
4127+
<details><summary><b>답</b></summary>
4128+
<p>
4129+
4130+
#### 답: C
4131+
4132+
`Number.isNaN` 메소드를 사용하면, 전달한 값이 _숫자 값_ 그리고 `NaN`인지 확인 할 수 있어요. `name`은 숫자 값이 아니에요, 따라서 `Number.isNaN(name)` 은 `false`을 반환해요. `age`는 숫자 값이지만, `NaN`은 아니에요, 따라서 `Number.isNaN(age)`은 `false`을 반환해요.
4133+
4134+
`isNaN` 메소드를 사용하면, 전달한 값이 숫자가 아닌지 확인할 수 있어요. `name`은 숫자가 아니에요, 따라서 `isNaN(name)`은 true를 반환해요. `age`은 숫자이고, 따라서 `isNaN(age)`은 `false`을 반환해요.
4135+
4136+
</p>
4137+
</details>
4138+
4139+
---
4140+
4141+
###### 129. 무엇이 출력 될까요?
4142+
4143+
```javascript
4144+
const randomValue = 21;
4145+
4146+
function getInfo() {
4147+
console.log(typeof randomValue);
4148+
const randomValue = 'Lydia Hallie';
4149+
}
4150+
4151+
getInfo();
4152+
```
4153+
4154+
- A: `"number"`
4155+
- B: `"string"`
4156+
- C: `undefined`
4157+
- D: `ReferenceError`
4158+
4159+
<details><summary><b>답</b></summary>
4160+
<p>
4161+
4162+
#### 답: D
4163+
4164+
`const` 키워드를 사용해 선언된 변수는 초기화 되기 전에 참조 할 수 없어요: 이건 _일시적 사각지대_ 라고 불려요. `getInfo`힘수에서, 변수 `randomValue`는 함수 `getInfo`의 스코프 안에 있어요. `typeof randomValue`의 값을 출력하고 싶은 줄에서, 변수 `randomValue`는 아직 초기화 되지 않았어요: `ReferenceError`가 던져져요! 변수 `randomValue`를 함수 `getInfo`안에 선언했기 때문에 엔진은 스코프 체인 아래로 내려가지 않아요.
4165+
4166+
</p>
4167+
</details>
4168+
4169+
---
4170+
4171+
###### 130. 무엇이 출력 될까요?
4172+
4173+
```javascript
4174+
const myPromise = Promise.resolve('Woah some cool data');
4175+
4176+
(async () => {
4177+
try {
4178+
console.log(await myPromise);
4179+
} catch {
4180+
throw new Error(`Oops didn't work`);
4181+
} finally {
4182+
console.log('Oh finally!');
4183+
}
4184+
})();
4185+
```
4186+
4187+
- A: `Woah some cool data`
4188+
- B: `Oh finally!`
4189+
- C: `Woah some cool data` `Oh finally!`
4190+
- D: `Oops didn't work` `Oh finally!`
4191+
4192+
<details><summary><b></b></summary>
4193+
<p>
4194+
4195+
#### 답: C
4196+
4197+
`try` 블록에서, `myPromise`의 awaited 값을 출력하고 있어요: `"Woah some cool data"`. `try` 블록에서 오류가 없기 때문에, `catch` 블록 안의 코드는 실행되지 않아요. `finally` 블록 안의 코드는 _항상_ 실행되고, `"Oh finally!"`가 출력돼요.
4198+
4199+
</p>
4200+
</details>
4201+
4202+
---
4203+
4204+
###### 131. 무엇이 출력 될까요?
4205+
4206+
```javascript
4207+
const emojis = ['🥑', ['✨', '✨', ['🍕', '🍕']]];
4208+
4209+
console.log(emojis.flat(1));
4210+
```
4211+
4212+
- A: `['🥑', ['✨', '✨', ['🍕', '🍕']]]`
4213+
- B: `['🥑', '✨', '✨', ['🍕', '🍕']]`
4214+
- C: `['🥑', ['✨', '✨', '🍕', '🍕']]`
4215+
- D: `['🥑', '✨', '✨', '🍕', '🍕']`
4216+
4217+
<details><summary><b></b></summary>
4218+
<p>
4219+
4220+
#### 답: B
4221+
4222+
`flat`를 사용하면, 새로운 평평한 배열을 만들어요. 평평한 배열의 깊이는 전달한 값에 달려있어요. 이 경우, 값 `1`(기본 값)을 전달했고,, 1번째 깊이에 있는 배열만 연결된다는 뜻이에요. 이 경우에선 `['🥑']` 그리고 `['✨', '✨', ['🍕', '🍕']]`. 두 배열을 연결하면 `['🥑', '✨', '✨', ['🍕', '🍕']]`가 돼요.
4223+
4224+
</p>
4225+
</details>
4226+
4227+
---
4228+
4229+
###### 132. 무엇이 출력 될까요?
4230+
4231+
```javascript
4232+
class Counter {
4233+
constructor() {
4234+
this.count = 0;
4235+
}
4236+
4237+
increment() {
4238+
this.count++;
4239+
}
4240+
}
4241+
4242+
const counterOne = new Counter();
4243+
counterOne.increment();
4244+
counterOne.increment();
4245+
4246+
const counterTwo = counterOne;
4247+
counterTwo.increment();
4248+
4249+
console.log(counterOne.count);
4250+
```
4251+
4252+
- A: `0`
4253+
- B: `1`
4254+
- C: `2`
4255+
- D: `3`
4256+
4257+
<details><summary><b></b></summary>
4258+
<p>
4259+
4260+
#### 답: D
4261+
4262+
`counterOne`는 클래스 `Counter`의 인스턴스예요. counter 클래스는 생성자 안에 속성 `count``increment` 메소드를 포함해요. 우선, `counterOne.increment()`를 사용해 `increment` 메소드를 두 번 호출해요. 현재, `counterOne.count``2`예요.
4263+
4264+
<img src="https://i.imgur.com/KxLlTm9.png" width="400">
4265+
4266+
그리고서, 새로운 변수 `counterTwo`를 만들고, `counterOne`과 동일하게 설정해요. 객체는 참조로 상호작용 하므로, `counterOne`을 가리키는 같은 메모리 영역에 새로운 참조를 만들었어요. 메모리의 같은 장소에 존재 하므로, 참조를 가진 `counterTwo` 객체의 모든 변화는, `counterOne` 객체에도 적용돼요. 지금, `counterTwo.count``2`예요.
4267+
4268+
`count``3`으로 만드는 `counterTwo.increment()`를 호출해요. 그리고서, `counterOne`의 count를 출력하고, `3`이 출력돼요.
4269+
4270+
<img src="https://i.imgur.com/BNBHXmc.png" width="400">
4271+
4272+
</p>
4273+
</details>
4274+
4275+
---
4276+
4277+
###### 133. 무엇이 출력 될까요?
4278+
4279+
```javascript
4280+
const myPromise = Promise.resolve(Promise.resolve('Promise!'));
4281+
4282+
function funcOne() {
4283+
myPromise.then((res) => res).then((res) => console.log(res));
4284+
setTimeout(() => console.log('Timeout!'), 0);
4285+
console.log('Last line!');
4286+
}
4287+
4288+
async function funcTwo() {
4289+
const res = await myPromise;
4290+
console.log(await res);
4291+
setTimeout(() => console.log('Timeout!'), 0);
4292+
console.log('Last line!');
4293+
}
4294+
4295+
funcOne();
4296+
funcTwo();
4297+
```
4298+
4299+
- A: `Promise! Last line! Promise! Last line! Last line! Promise!`
4300+
- B: `Last line! Timeout! Promise! Last line! Timeout! Promise!`
4301+
- C: `Promise! Last line! Last line! Promise! Timeout! Timeout!`
4302+
- D: `Last line! Promise! Promise! Last line! Timeout! Timeout!`
4303+
4304+
<details><summary><b></b></summary>
4305+
<p>
4306+
4307+
#### 답: D
4308+
4309+
우선, `funcOne`를 호출했어요. `funcOne`의 첫 번째 줄에서, _비동기_ 작업 `myPromise` 프로미스를 불러요. 엔진이 프로미스를 처리하느라고 바쁜 와중에도, 계속해서 `funcOne` 함수를 실행해요. 다음 줄은 _비동기_ `setTimeout` 함수이고, 콜백을 Web API로 보내요. (내가 작성한 이벤트 루프에 대한 글 보기 <a href="https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif">여기</a>.)
4310+
4311+
프라미스와 타임아웃 모두 비동기 작업이고, 함수는 프라미스 함수와 `setTimeout` 콜백을 처리하느라고 바쁜 와중에도 계속해서 실행해요. 이건 비동기 작업이 아닌 `Last line!`가 첫 번째로 출력된다는 걸 의미해요. 이건 `funcOne` 함수의 마지막 줄에 있고, 프라미스가 resolved 되어, `Promise!`가 출력돼요. 그러나, `funcTwo()`를 호출 했기 때문에, 콜 스택은 비어있지 않고, `setTimeout` 콜백 함수는 아직 콜 스택에 추가할 수 없어요.
4312+
4313+
`funcTwo`에서, 우선 myPromise 프라미스를 _기다려요_. `await`키워드를 사용해서, 프라미스가 resolved (or rejected) 될 때까지 함수의 실행을 멈췄어요. 그리고서, `res`의 값을 기다렸다가 출력해요. (프라미스 자체가 프라미스를 반환하기 때문에). 이건 `Promise!`을 출력해요.
4314+
4315+
다음 줄은 _비동기_ `setTimeout` 함수로, 콜백을 Web API로 보내요.
4316+
4317+
`funcTwo`의 마지막 줄에서, `Last line!`가 콘솔에 출력돼요. 지금, `funcTwo`가 콜 스택에서 제거되었기 때문에, 콜 스택은 비어있어요. 대기열에서 대기 중인 콜백은(`funcOne`에서의 (`() => console.log("Timeout!")`, 그리고 `funcTwo`에서의 `() => console.log("Timeout!")`) 호출 스택에 하나씩 추가되어요. 첫 번째 콜백은 `Timeout!`을 출력하고, 스택에서 제거돼요. 그리고서, 두 번째 콜백은 `Timeout!`을 출력하고, 스택에서 제거돼요. 이건 `Last line! Promise! Promise! Last line! Timeout! Timeout!`을 출력해요.
4318+
4319+
</p>
4320+
</details>
4321+
4322+
---
4323+
4324+
###### 134. `index.js`에서 `sum.js` 안에 있는 `sum`을 호출 하려면 어떻게 해야하나요?
4325+
4326+
```javascript
4327+
// sum.js
4328+
export default function sum(x) {
4329+
return x + x;
4330+
}
4331+
4332+
// index.js
4333+
import * as sum from './sum';
4334+
```
4335+
4336+
- A: `sum(4)`
4337+
- B: `sum.sum(4)`
4338+
- C: `sum.default(4)`
4339+
- D: Default aren't imported with `*`, only named exports
4340+
4341+
<details><summary><b>답</b></summary>
4342+
<p>
4343+
4344+
#### 답: C
4345+
4346+
별표 `*`를 사용하면, 파일에서 내보낸 모든 값(기본값과 명명된 것 모두)을 가져와요. 만약 다음 파일을 가지고 있다면:
4347+
4348+
```javascript
4349+
// info.js
4350+
export const name = 'Lydia';
4351+
export const age = 21;
4352+
export default 'I love JavaScript';
4353+
4354+
// index.js
4355+
import * as info from './info';
4356+
console.log(info);
4357+
```
4358+
4359+
아래와 같이 출력될 거예요:
4360+
4361+
```javascript
4362+
{
4363+
default: "I love JavaScript",
4364+
name: "Lydia",
4365+
age: 21
4366+
}
4367+
```
4368+
4369+
`sum`을 예로 들자면, 가져온 `sum`의 값은 다음처럼 보인다는 의미에요:
4370+
4371+
```javascript
4372+
{ default: function sum(x) { return x + x } }
4373+
```
4374+
4375+
`sum.default`을 불러 함수를 호출 할 수 있어요.
4376+
4377+
</p>
4378+
</details>
4379+
4380+
---
4381+
4382+
###### 135. 무엇이 출력 될까요?
4383+
4384+
```javascript
4385+
const handler = {
4386+
set: () => console.log('Added a new property!'),
4387+
get: () => console.log('Accessed a property!'),
4388+
};
4389+
4390+
const person = new Proxy({}, handler);
4391+
4392+
person.name = 'Lydia';
4393+
person.name;
4394+
```
4395+
4396+
- A: `Added a new property!`
4397+
- B: `Accessed a property!`
4398+
- C: `Added a new property!` `Accessed a property!`
4399+
- D: Nothing gets logged
4400+
4401+
<details><summary><b>답</b></summary>
4402+
<p>
4403+
4404+
#### 답: C
4405+
4406+
Proxy 객체를 사용하면, 두번째 인수로 전달 한 객체에 사용자 지정 동작을 추가 할 수 있어요. 이 경우엔, 두 개의 속성을 가진 `handler` 객체를 전달 했어요: `set` 과 `get` 속성 값을 _설정_ 할 때마다 `set`은 호출되고, `get`은 속성 값을 _얻을_ (접근)때 마다 호출되어요.
4407+
4408+
첫 번째 인수는 빈 객체 `{}`고, `person`의 값이에요. 이 객체에 객체 `handler`의 사용자 지정 동작을 추가했어요. `person` 객체에 속성을 추가하면, `set` 이 호출 돼요. `person` 객체의 속성에 접근하면, `get` 이 호출 돼요.
4409+
4410+
우선, 프록시 객체에 새로운 속성 `name`을 추가했어요(`person.name = "Lydia"`). `set`이 호출되고, `"Added a new property!"`을 출력 해요.
4411+
4412+
그리고서, 프록시 객체의 속성 값에 접근하고, handler 객체의 속성 `get` 이 호출 돼요. `"Accessed a property!"`을 출력 해요.
4413+
4414+
</p>
4415+
</details>
4416+
4417+
---
4418+
4419+
###### 136. 다음 중 어느 것이 `person` 객체를 수정 할 수 있을까요?
4420+
4421+
```javascript
4422+
const person = { name: 'Lydia Hallie' };
4423+
4424+
Object.seal(person);
4425+
```
4426+
4427+
- A: `person.name = "Evan Bacon"`
4428+
- B: `person.age = 21`
4429+
- C: `delete person.name`
4430+
- D: `Object.assign(person, { age: 21 })`
4431+
4432+
<details><summary><b>답</b></summary>
4433+
<p>
4434+
4435+
#### 답: A
4436+
4437+
`Object.seal`을 사용하면, 새로운 속성이 _추가_ 되거나, 혹은 존재하는 속성이 _제거_ 되는 것을 막을 수 있어요.
4438+
4439+
그러나, 여전히 존재하는 속성의 값을 수정 할 수 있어요.
4440+
4441+
</p>
4442+
</details>
4443+
4444+
---

0 commit comments

Comments
 (0)