λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 26μž₯ ES6 ν•¨μˆ˜μ˜ μΆ”κ°€ κΈ°λŠ₯

728x90

πŸ₯ž 26.1 ν•¨μˆ˜μ˜ ꡬ뢄

 

ES6 μ΄μ „μ˜ ν•¨μˆ˜

- ν•¨μˆ˜λŠ” 별닀λ₯Έ ꡬ뢄 없이 λ‹€μ–‘ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©λ¨.

- νŽΈλ¦¬ν•΄λ³΄μ΄μ§€λ§Œ μ‹€μˆ˜ 유발 & μ„±λŠ₯ λ©΄μ—μ„œ 손해

- 일반 ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν•  수 μžˆλŠ” 것은 λ¬Όλ‘  μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν•  수 μžˆμ—ˆμŒ. 

- 객체에 바인딩 된 ν•¨μˆ˜λ„ 일반 ν•¨μˆ˜ & μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ λͺ¨λ‘ 호좜 κ°€λŠ₯ν–ˆμŒ.

 

ES6 μ΄ν›„μ˜ ν•¨μˆ˜

 

 

 

 

 

πŸ₯ž 26.2 λ©”μ„œλ“œ

 

μ •ν™•ν•œ μ •μ˜κ°€ 생김.

 

🍯 λ©”μ„œλ“œ

- λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„μœΌλ‘œ μ •μ˜λœ ν•¨μˆ˜λ§Œμ„ 의미. 

- μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λŠ” non-constructor -> μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν•  수 μ—†λ‹€.

- prototype ν”„λ‘œνΌν‹°κ°€ μ—†κ³  ν”„λ‘œνΌν‹°λ„ μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

- μžμ‹ μ„ λ°”μΈλ”©ν•œ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” λ‚΄λΆ€ 슬둯 [[HomeObject]] λ₯Ό κ°–λŠ”λ‹€ -> super ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. (μ°Έμ‘° κ°€λŠ₯)

 

 

 

 

 

πŸ₯ž 26.3 ν™”μ‚΄ν‘œ ν•¨μˆ˜

 

26.3.1 ν™”μ‚΄ν‘œ ν•¨μˆ˜ μ •μ˜

const μ‹λ³„μž = () => {}

ν•œμ€„μ˜ ν‘œν˜„μ‹λ‘œ μ“Έ 수 있으면 return, {} μƒλž΅ κ°€λŠ₯. 

κ°μ²΄λŠ” () 둜 κ°μ‹Έμ€˜μ•Όν•¨. 

 

 

26.3.2 ν™”μ‚΄ν‘œ ν•¨μˆ˜μ™€ 일반 ν•¨μˆ˜μ˜ 차이

 

01. ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λŠ” non-constructor λ‹€.

02. μ€‘λ³΅λœ λ§€κ°œλ³€μˆ˜ 이름을 μ„ μ–Έν•  수 μ—†λ‹€. 

(일반 ν•¨μˆ˜λŠ” 'strict mode' μ—μ„œλ§Œ 쀑볡 λΆˆκ°€)

03. ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ 자체의 this, arguments, super, new, target 바인딩을 갖지 μ•ŠλŠ”λ‹€.

ν™”μ‚΄ν‘œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ°Έμ‘°μ‹œ -> μŠ€μ½”ν”„ 체인을 톡해 μƒμœ„ μŠ€μ½”ν”„μ—μ„œ 찾음

 

 

26.3.3 this

 

κ°€μž₯ 큰 차이.

 

클래슀 λ‚΄λΆ€ -> strict mode 적용 -> 이반 ν•¨μˆ˜λ‘œμ„œ 호좜된 λͺ¨λ“  ν•¨μˆ˜μ˜ λ‚΄λΆ€ this μ—λŠ” undefined κ°€ 바인딩됨. 

 

2번 콜백 ν•¨μˆ˜μ˜ this 와 μ™ΈλΆ€ ν•¨μˆ˜ this κ°€ μ„œλ‘œ λ‹€λ₯Έ 값을 가진닀. 

1λ²ˆμ—μ„  prefix.

 

"콜백 ν•¨μˆ˜ λ‚΄λΆ€μ˜ this 문제"

=> ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ ν•΄κ²° κ°€λŠ₯. 

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ 자체의 this 바인딩을 갖지 μ•ŠκΈ° λ•Œλ¬Έ. μƒμœ„ μŠ€μ½”ν”„μ˜ this λ₯Ό κ·ΈλŒ€λ‘œ 참쑰함. 

=> "lexical this" 라고 함. 

 

λ©”μ„œλ“œλ₯Ό ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ μ •μ˜ν•˜λŠ” 것은 피해야함. 

λ©”μ„œλ“œμ—μ„œ this.ν”„λ‘œνΌν‹°μ΄λ¦„ μ‚¬μš©ν•˜λ©΄ -> μ‚¬μš©ν•  수 μ—†μŒ. this 바인딩이 μ—†κΈ° λ•Œλ¬Έ. 

 

 

26.3.4 super

 

super 바인딩 갖지 μ•ŠμŒ. => μƒμœ„ μŠ€μ½”ν”„μ˜ super 을 참쑰함. 

 

26.3.5 arguments

 

arguments 바인딩 갖지 μ•ŠμŒ. => μƒμœ„ μŠ€μ½”ν”„μ˜ arguments  참쑰함. 

 

 

 

 

 

πŸ₯ž 26.4 Rest νŒŒλΌλ―Έν„°

 

26.4.1 κΈ°λ³Έ 문법

 

... rest

ν•¨μˆ˜μ— 전달될 μΈμˆ˜λ“€μ˜ λͺ©λ‘μ„ λ°°μ—΄λ‘œ 전달 λ°›μŒ. 

 

일반 λ§€κ°œλ³€μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš© κ°€λŠ₯, μ‚¬μš©μ‹œ 맨 뒀에 둬야함. 

rest νŒŒλΌλ―Έν„°λŠ” 단 ν•˜λ‚˜λ§Œ μ„ μ–Έν•  수 있음. 

length ν”„λ‘œνΌν‹°μ— 영ν–₯을 주지 μ•ŠμŒ. (세지 μ•ŠμŒ)

 

26.4.2 Rest νŒŒλΌλ―Έν„°μ™€ arguments 객체

 

arguments 객체

- ν•¨μˆ˜ 호좜 μ‹œ 전달될 μΈμˆ˜λ“€μ˜ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 순회 κ°€λŠ₯ν•œ μœ μ‚¬ λ°°μ—΄ 객체

- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 지역 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€.

- ν•˜μ§€λ§Œ μœ μ‚¬ λ°°μ—΄ κ°μ²΄μ΄λ―€λ‘œ -> λ°°μ—΄ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Function.call, Function.apply λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ λ°°μ—΄λ‘œ λ³€ν™˜ν•΄μ•Όν•¨. (λ²ˆκ±°λ‘œμ›€)

-> rest 둜 λ°›μœΌλ©΄ 이런 λ²ˆκ±°λ‘œμ›€μ„ ν”Όν•  수 있음. 

 

 

 

 

 

πŸ₯ž 26.5 λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’

 

ν•¨μˆ˜ 호좜 μ‹œ λ§€κ°œλ³€μˆ˜μ™€ 인수의 μˆ˜κ°€ μΌμΉ˜ν•˜λŠ”μ§€ μ²΄ν¬ν•˜μ§€ μ•ŠμŒ. 

=> λ§Œμ•½ 없을 μ‹œ undefined 둜 μ—λŸ¬ λ°œμƒ

=> λ°©μ–΄ μ½”λ“œ ν•„μš”

 

기본값을 전달할 수 있음. 

 

 

 

 

κΈ°λ³Έ 값을 같이 μ „λ‹¬ν•˜λ©΄ 

ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•˜λ˜ 인수 체크 및 μ΄ˆκΈ°ν™”λ₯Ό κ°„μ†Œν™” ν•  수 μžˆλ‹€.

 

기본값은

- λ§€κ°œλ³€μˆ˜μ— 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ€ 경우

- undefined λ₯Ό μ „λ‹¬ν•œ 경우

μ—λ§Œ μœ νš¨ν•˜λ‹€.

 

rest νŒŒλΌλ―Έν„°μ—λŠ” κΈ°λ³Έκ°’ 지정할 수 μ—†μŒ. 

 

 

 

728x90
λ°˜μ‘ν˜•