Skip to content

Latest commit

Β 

History

History
264 lines (206 loc) Β· 8.61 KB

ch12-ν•΄μ„€.md

File metadata and controls

264 lines (206 loc) Β· 8.61 KB

Chapter12

πŸ“Œλ¬Έμ œ1

true or false λ₯Ό κ³ λ₯΄μ‹œμ˜€

(1) ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
(2) ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ ν•¨μˆ˜μ™€ ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ ν•¨μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ… 될 λ•Œ 
ν˜Έμ΄μŠ€νŒ… μ’…λ₯˜κ°€ λ‹€λ₯΄λ‹€.
(3)Function μƒμ„±μž ν•¨μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό 생성할 수 μžˆμ§€λ§Œ, ꢌμž₯λ˜μ§€ μ•ŠλŠ”λ‹€.

μ •λ‹΅ 및 ν•΄μ„€

(1) false. ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ ν•¨μˆ˜λŠ” ν•¨μˆ˜ 이름이 μ•„λ‹Œ ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžλ‘œ ν˜ΈμΆœν•œλ‹€. 
μžλ°”μŠ€ν¬λ¦½νŠΌ 엔진은 ν•¨μˆ˜ 이름과 λ™μΌν•œ μ΄λ¦„μ˜ μ‹λ³„μžλ₯Ό μ•”λ¬΅μ μœΌλ‘œ μƒμ„±ν•˜κ³  거기에 
ν•¨μˆ˜ 객체λ₯Ό ν• λ‹Ήν•œλ‹€. 
(2) true. ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ„ μ–Έλœ ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄(전체가 λ‹€ λŒμ–΄μ˜¬λ €μ§„λ‹€).
ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ ν•¨μˆ˜λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(undefined)이 λœλ‹€.
(3) true. μƒμ„±μž ν•¨μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 방식은 μΌλ°˜μ μ΄μ§€ μ•Šκ³  λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€. 
ν΄λ‘œμ €λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ” λ“± λ‹€λ₯Έ λ™μž‘μ„ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

πŸ“Œλ¬Έμ œ2

λ‹€μŒ μ½”λ“œμ˜ κ²°κ³Όλ₯Ό κ΅¬ν•˜μ‹œμ˜€

function print(a = 1, b = 2 , c= 3){
	console.log(a + b + c);
}
print(null, undefined);

μ •λ‹΅ 및 ν•΄μ„€

5
λ§€κ°œλ³€μˆ˜ κΈ°λ³Έ 값은 λ§€κ°œλ³€μˆ˜μ— 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•˜μ„ κ²½μš°μ™€ undefinedλ₯Ό μ „λ‹¬ν•œ κ²½μš°μ—λ§Œ μœ νš¨ν•˜λ‹€.
0(암묡적 ν˜•λ³€ν™˜) + 2 + 3 이기 λ•Œλ¬Έμ— 5κ°€ λœλ‹€.

πŸ“Œλ¬Έμ œ3

λ‹€μŒ μ½”λ“œμ˜ κ²°κ³Όλ₯Ό μ“°μ‹œμ˜€

function addA(obj){obj.a++};
function swapA(obj1, obj2){ 
	const temp  = obj1.a;
	obj1.a = obj2.a;
	obj2.a = temp;
}
const obj1 = {a : 1};
const obj2 = {a : 2};

addA(obj2);
swapA(obj1, obj2);
console.log(obj1, obj2);

μ •λ‹΅ 및 ν•΄μ„€

{a: 3} {a: 1}

참쑰에 μ˜ν•œ 전달 λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— μ™ΈλΆ€ ν•¨μˆ˜μ˜ λͺΈμ²΄μ—μ„œ 변경이 κ°€λŠ₯ν•˜λ‹€. 
λ”°λΌμ„œ 원본 객체가 λ³€κ²½λ˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ λ°œμƒν•œλ‹€.

πŸ“Œλ¬Έμ œ4

보기와 같이 ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μž‘μ„±ν•˜μ˜€μ„ λ•Œ, fooν•¨μˆ˜ λͺΈμ²΄ μ™ΈλΆ€μ—μ„œ fooν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ” 이유λ₯Ό μž‘μ„±ν•˜μ‹œμ˜€.

function foo() {
	console.log('foo');
}

μ •λ‹΅ 및 ν•΄μ„€

ν•¨μˆ˜ 이름은 ν•΄λ‹Ή ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€.
ν•˜μ§€λ§Œ 보기 μ½”λ“œμ™€ 같이 ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μž‘μ„±λ˜λŠ” 경우 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ•”λ¬΅μ μœΌλ‘œ ν•¨μˆ˜ 이름과 λ™μΌν•œ μ‹λ³„μžλ₯Ό μƒμ„±ν•œλ‹€.
(μƒμ„±λœ μ‹λ³„μžλ₯Ό μ½”λ“œλ‘œ μž‘μ„±ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.)
λ”°λΌμ„œ ν•¨μˆ˜ λͺΈμ²΄ μ™ΈλΆ€μ—μ„œ ν•¨μˆ˜ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœν•˜λ©΄ μ‹λ³„μžλ₯Ό 톡해 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ²Œ λœλ‹€.
var foo = function foo() {
	console.log('foo');
};
  • p160-163

πŸ“Œλ¬Έμ œ5

λ³€μˆ˜μ˜ Hoistingκ³Ό ν•¨μˆ˜μ˜ Hoisting(ν•¨μˆ˜μ˜ μ„ μ–Έλ¬Έ)의 차이점을 μž‘μ„±ν•˜μ‹œμ˜€.

μ •λ‹΅ 및 ν•΄μ„€

λ³€μˆ˜μ˜ ν˜Έμ΄μŠ€νŒ…μ€ λŸ°νƒ€μž„ 이전에 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μ‹λ³„μžλ₯Ό μƒμ„±ν•œλ‹€.
λ”°λΌμ„œ ν•΄λ‹Ή λ³€μˆ˜κ°€ μ„ μ–Έλ˜κΈ° 전에 μ°Έμ‘°λ₯Ό ν•˜λ©΄ undefined(var의 경우)둜 μ΄ˆκΈ°ν™”λ˜μ–΄ μžˆλŠ” 것이닀.

ν•¨μˆ˜μ˜ ν˜Έμ΄μŠ€νŒ…λ„ λŸ°νƒ€μž„ 이전에 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μ‹λ³„μžλ₯Ό μƒμ„±ν•œλ‹€.
ν•˜μ§€λ§Œ λ³€μˆ˜μ˜ κ²½μš°μ™€ λ‹€λ₯΄κ²Œ ν•¨μˆ˜ 객체가 μƒμ„±λ˜μ–΄ ν• λ‹ΉκΉŒμ§€ λŸ°νƒ€μž„ 이전에 μ™„λ£Œλœλ‹€.

ν•¨μˆ˜μ˜ ν‘œν˜„μ‹μ˜ 경우 λ³€μˆ˜μ˜ μ„ μ–Έλ¬Έκ³Ό λ³€μˆ˜ ν• λ‹Ήλ¬Έμ˜ μΆ•μ•½ ν‘œν˜„μœΌλ‘œ λ™μž‘ν•œλ‹€.
λ”°λΌμ„œ λ³€μˆ˜ 할당문이 μ‹€ν–‰λ˜λŠ” λŸ°νƒ€μž„μ— ν•¨μˆ˜ 객체가 μƒμ„±λ˜λ―€λ‘œ ν•¨μˆ˜ ν‘œν˜„μ‹ 이전에 ν•¨μˆ˜ 호좜이 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • p165

πŸ“Œλ¬Έμ œ6

λ‹€μŒ 보기의 순수 ν•¨μˆ˜μ™€ κ΄€λ ¨λœ λ‚΄μš©μ„ λͺ¨λ‘ κ³ λ₯΄μ‹œμ˜€.

(1) ν•¨μˆ˜ μ™ΈλΆ€ μƒνƒœμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
(2) μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλ‹€.
(3) λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜λ„ μ—†λ‹€.
(4) 항상 λ°˜ν™˜κ°’μ΄ μΌμ •ν•˜λ‹€.
(5) ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό 관련이 μžˆλ‹€.
(6) 인자의 값을 μ ˆλŒ€ λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ •λ‹΅ 및 ν•΄μ„€

λ‹΅ : (1), (5)
(1), (2)
μ™ΈλΆ€ μƒνƒœμ— μ˜μ‘΄ν•˜μ§€λ„ μ•Šκ³  λ³€κ²½ν•˜μ§€λ„ μ•ŠλŠ”, 즉 λΆ€μˆ˜ νš¨κ³Όκ°€ μ—†λŠ” ν•¨μˆ˜λ₯Ό 순수 ν•¨μˆ˜λΌκ³  ν•œλ‹€.

(3)
λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜λŠ” 상관이 μ—†λ‹€.

(4)
λ™μΌν•œ μΈμˆ˜κ°€ μ „λ‹¬λ˜λ©΄ μ–Έμ œλ‚˜ λ™μΌν•œ 값을 λ°˜ν™˜ν•œλ‹€.
λ”°λΌμ„œ λ‹€λ₯Έ μΈμˆ˜κ°€ 였면 λ°˜ν™˜κ°’μ΄ 달라진닀.

(5) ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 순수 ν•¨μˆ˜λ₯Ό 톡해 λΆ€μˆ˜ 효과λ₯Ό μ΅œλŒ€ν•œ μ–΅μ œν•΄ 였λ₯˜λ₯Ό ν”Όν•˜κ³  ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±μ„ λ†’μ΄λ €λŠ” λ…Έλ ₯의 μΌν™˜μ΄λΌ ν•  수 μžˆλ‹€.

(6) 인자의 값을 λ³€κ²½ν•  수 μžˆλ‹€.
  • p186-188

πŸ“Œλ¬Έμ œ7

μΈμˆ˜μ™€ λ§€κ°œλ³€μˆ˜μ˜ μ°¨μ΄μ μ—λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€.

λ‹΅μ•ˆ μž‘μ„±

p.155
  - 인수: ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” κ³Όμ •μ—μ„œ μ „λ‹¬λ˜λŠ” λ³€μˆ˜(μž…λ ₯)
  - λ§€κ°œλ³€μˆ˜: ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μž…λ ₯을 μ „λ‹¬λ°›λŠ” λ³€μˆ˜

πŸ“Œλ¬Έμ œ8

ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ˜ μ°¨μ΄μ μ—λŒ€ν•΄ μž‘μ„±ν•˜μ‹œμ˜€.

λ‹΅μ•ˆ μž‘μ„±

p.165
β†’ ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ€ λŸ°νƒ€μž„μ΄μ „μ— μ„ μ–Έκ³Όλ™μ‹œμ— ν•¨μˆ˜κ°μ²΄λ‘œ μ΄ˆκΈ°ν™”λ˜μ§€λ§Œ, λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ€ 선언문은 λŸ°νƒ€μž„μ΄μ „, κ°’μ˜ 할당은 λŸ°νƒ€μž„μ— μ§„ν–‰λœλ‹€.

ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…: ν•¨μˆ˜ μ„ μ–Έλ¬Έμ—μ˜ν•΄ μ„ μ–Έλœ ν•¨μˆ˜κ°€ λŸ°νƒ€μž„μ΄μ „μ— μ„ μ–Έκ³Όλ™μ‹œμ— ν•¨μˆ˜κ°μ²΄λ‘œ μ΄ˆκΈ°ν™”λ˜λ˜λŠ” ν˜„μƒ.(μ„ μ–Έλ¬Έ 이전에 ν˜ΈμΆœν•΄λ„ 정상 λ™μž‘.)
λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…: var,let,const둜 μ„ μ–Έλœ λ³€μˆ˜ 선언문은 λŸ°νƒ€μž„μ΄μ „μ— μ‹λ³„μžλ₯Ό μƒμ„±ν•œλ‹€λŠ”μ μ—μ„œ ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό λ™μΌν•˜μ§€λ§Œ varλŠ” undefined둜 μ΄ˆκΈ°ν™”,const와 let은 μΌμ‹œμ  μ‚¬κ°μ§€λŒ€λ₯Ό ν˜•μ„±(μ„ μ–Έλ¬Έ 이전에 호좜,μ°Έμ‘°ν• μ‹œ var : undefined, let,const: μ—λŸ¬λ°œμƒ)



πŸ“Œλ¬Έμ œ9

λ‹€μŒ 두 ν•¨μˆ˜(f1,f2)쀑 μˆœμˆ˜ν•¨μˆ˜μ™€ λΉ„μˆœμˆ˜ν•¨μˆ˜λ₯Ό κ΅¬λΆ„ν•˜κ³ , 이유λ₯Ό μž‘μ„±ν•˜μ‹œμ˜€.

const f1 = (n) => { //(1)
        return n++;
      };


let num = 1;
const f2 = () => { /// (2)
	return num++;
      };

λ‹΅μ•ˆ μž‘μ„±

(1)
f1이 μˆœμˆ˜ν•¨μˆ˜μΈ μ΄μœ λŠ”
    1. λ™μΌν•œ μΈμˆ˜κ°€ μ „λ‹¬λ˜λ©΄ μ–Έμ œλ‚˜ λ™μΌν•œ 값을 λ°˜ν™˜ν•˜κΈ°λ•Œλ¬Έ
    2. μ–΄λ–€ μ™ΈλΆ€ μƒνƒœμ— μ˜μ‘΄ν•˜μ§€μ•Šκ³  였직 λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ „λ‹¬λœ μΈμˆ˜μ—κ²Œλ§Œ μ˜μ‘΄ν•΄ λ°˜ν™˜κ°’μ„ λ§Œλ“€κΈ° λ•Œλ¬Έ.
    3. μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ.(λΆ€μˆ˜νš¨κ³Όκ°€ μ—†λ‹€.)
    
    β†’ μˆœμˆ˜ν•¨μˆ˜λŠ” μ–΄λ–€ μ™ΈλΆ€ μƒνƒœμ—λ„ μ˜μ‘΄ν•˜μ§€μ•ŠμœΌλ©°, μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€λ„ μ•ŠλŠ” ν•¨μˆ˜λ‹€.

πŸ“Œλ¬Έμ œ10

ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄ μ•„λŠ”λŒ€λ‘œ μ„€λͺ…ν•˜μ„Έμš”.

λ‹΅μ•ˆ μž‘μ„±

156p
(1) λͺ‡ λ²ˆμ΄λ“  ν˜ΈμΆœν•  수 μžˆμœΌλ―€λ‘œ μ½”λ“œμ˜ μž¬μ‚¬μš©μ΄ μš©μ΄ν•˜λ‹€.
(2) μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±μ„ 높이고 μ‹€μˆ˜λ₯Ό 쀄여 μ½”λ“œμ˜ 신뒰성을 높인닀.
(3) μ μ ˆν•œ ν•¨μˆ˜μ΄λ¦„μœΌλ‘œ ν•¨μˆ˜μ˜ λ‚΄λΆ€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜μ§€ μ•Šκ³ λ„ ν•¨μˆ˜μ˜ 역할을 νŒŒμ•…ν•  수 μžˆμœΌλ―€λ‘œ μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚¨λ‹€.

πŸ“Œλ¬Έμ œ11

ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ… 쀑 μ–΄λ–€ 것이 λ°œμƒν•˜λŠ”κ°€?

λ‹΅μ•ˆ μž‘μ„±

165p
λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•œλ‹€.

ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜μ— ν• λ‹Ήλ˜λŠ” 값이 ν•¨μˆ˜ λ¦¬ν„°λŸ΄μΈ 문이닀.
λ”°λΌμ„œ ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜ μ„ μ–Έλ¬Έκ³Ό λ³€μˆ˜ 할당문을 ν•œ λ²ˆμ— κΈ°μˆ ν•œ μΆ•μ•½ ν‘œν˜„κ³Ό λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€.

λ³€μˆ˜ 선언은 λŸ°νƒ€μž„ 이전에 μ‹€ν–‰λ˜μ–΄ undefined둜 μ΄ˆκΈ°ν™”λ˜μ§€λ§Œ, λ³€μˆ˜ ν• λ‹Ήλ¬Έμ˜ 값은 할당문이 μ‹€ν–‰λ˜λŠ” μ‹œμ (λŸ°νƒ€μž„)에 ν‰κ°€λ˜λ―€λ‘œ
ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ„ 할당문이 μ‹€ν–‰λ˜λŠ” μ‹œμ μ— ν‰κ°€λ˜μ–΄ ν•¨μˆ˜ 객체가 λœλ‹€.

λ”°λΌμ„œ ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄ ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•œλ‹€.

πŸ“Œλ¬Έμ œ12

λ‹€μŒ μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜κ³ , μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.

function add(x, y) {
  return x + y;
}

console.log(add(2)); // (1)
console.log(add("a", "b")); //(2)

λ‹΅μ•ˆ μž‘μ„±

170p
(1) NaN
(2) ab

1. μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜μ™€ 인수의 κ°œμˆ˜κ°€ μΌμΉ˜ν•˜λŠ”μ§€ νŒŒμ•…ν•˜μ§€ μ•ŠλŠ”λ‹€.
2. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž… 언어이기 λ•Œλ¬Έμ—, μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ„ 사전에 지정할 수 μ—†λ‹€.

λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ, λ‹€μŒκ³Ό 같이 μ μ ˆν•œ μΈμˆ˜κ°€ μ „λ‹¬λ˜μ—ˆλŠ”μ§€ 확인할 ν•„μš”κ°€ μžˆλ‹€.

function add(x, y) {
  if (typeof x !== "number" || typeof y !== "number") {
    throw new TypeError("μΈμˆ˜λŠ” λͺ¨λ‘ 숫자 값이어야 ν•©λ‹ˆλ‹€!");
  }
  return x + y;
}