🏹 ν™”μ‚΄ν‘œ ν•¨μˆ˜μ— λŒ€ν•΄ μΌλ°˜ν•¨μˆ˜μ™€ λΉ„κ΅ν•˜μ—¬ μ•Œμ•„λ³΄μž.

HaizelΒ·2023λ…„ 6μ›” 16일
1
post-thumbnail

기술 면접을 λŒ€λΉ„ν•΄ κ°œλ…μ„ 🍰 ν•œμž… 크기둜 잘라 μ •λ¦¬ν•©λ‹ˆλ‹€.
κΉƒν—ˆλΈŒκ°€ κΆκΈˆν•˜λ‹€λ©΄ λ†€λŸ¬μ˜€μ„Έμš”!
πŸ‘‰ κΉƒν—ˆλΈŒ λ³΄λŸ¬κ°€κΈ° (Since 2023.05.10 ~ )

πŸΉΒ ν™”μ‚΄ν‘œ ν•¨μˆ˜(Arrow Function)

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ES6에 μƒˆλ‘­κ²Œ μΆ”κ°€λœ λ¬Έλ²•μœΌλ‘œ, κΈ°μ‘΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ— λΉ„ν•΄ κ°„λ‹¨ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ˜ν•œ ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜λ‘œλ§Œ μ‚¬μš©ν•  수 μžˆμ–΄, ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

// 일반 ν•¨μˆ˜
function foo() {
 ...
}

// ν™”μ‚΄ν‘œ ν•¨μˆ˜
const foo = () => {
 ...
}

1. This

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λͺ¨λ“  ν•¨μˆ˜λŠ” 싀행될 λ•Œλ§ˆλ‹€ ν•¨μˆ˜ 내뢀에 this 객체가 μΆ”κ°€λ©λ‹ˆλ‹€.

βœ…Β μΌλ°˜ν•¨μˆ˜

일반 ν•¨μˆ˜λŠ” ν•¨μˆ˜ μ„ μ–Έ μ‹œμ μ΄ μ•„λ‹Œ 호좜 μ‹œμ  에 ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€μ— 따라 this에 바인딩할 객체가 λ™μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€.

일반 ν•¨μˆ˜μ˜ this 바인딩

  • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰μ‹œ β†’ μ „μ—­ 객체(window)λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰μ‹œ β†’ λ©”μ†Œλ“œλ₯Ό μ†Œμœ ν•˜κ³  μžˆλŠ” 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • μƒμ„±μž ν•¨μˆ˜μ—μ„œ μ‹€ν–‰ μ‹œ β†’ μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

βœ…Β ν™”μ‚΄ν‘œ ν•¨μˆ˜

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έ ν•  λ•Œ this에 바인딩할 객체가 μ •μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€. λ•Œλ¬Έμ— ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ thisλŠ” μ–Έμ œλ‚˜ μƒμœ„ μŠ€μ½”ν”„μ˜ thisλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

λ˜ν•œ call, apply, bind λ©”μ†Œλ“œλ₯Ό 톡해 thisλ₯Ό λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


2. μƒμ„±μž ν•¨μˆ˜λ‘œ μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€

βœ…Β μΌλ°˜ν•¨μˆ˜

μƒμ„±μž ν•¨μˆ˜λ‘œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

βœ…Β ν™”μ‚΄ν‘œ ν•¨μˆ˜

prototype ν”„λ‘œνΌν‹°λ₯Ό 가지고 μžˆμ§€ μ•Šμ•„, μƒμ„±μž ν•¨μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

// <------ 일반 ν•¨μˆ˜ ------>
function foo() {
	this.num = 1234;
}

const fooA = new foo();
console.log(fooA.num); // 1234

// <------ ν™”μ‚΄ν‘œ ν•¨μˆ˜ ------>
const arrFoo = () => {
	this.num = 1234;
}

const fooB = new arrFoo(); // Error

3. arguments μ‚¬μš© μ—¬λΆ€

argumentsλŠ” ν•¨μˆ˜μ— μ „λ‹¬λœ 인수 값을 담은 λ°°μ—΄ 객체λ₯Ό λ§ν•˜λ©°, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ…Β μΌλ°˜ν•¨μˆ˜

ν•¨μˆ˜κ°€ 싀행될 λ•Œ μ•”λ¬΅μ μœΌλ‘œ arguments λ³€μˆ˜κ°€ μ „λ‹¬λ˜μ–΄ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ…Β ν™”μ‚΄ν‘œ ν•¨μˆ˜

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” arguments λ³€μˆ˜κ°€ μ „λ‹¬λ˜μ§€ μ•ŠλŠ”λ‹€.

// <------ 일반 ν•¨μˆ˜ ------>
function foo () {
  console.log(arguments[0]);
}

foo("a", "b", "c"); // "a"

// <------ ν™”μ‚΄ν‘œ ν•¨μˆ˜ ------>
const foo = () => {
  console.log(arguments[0]);
}

foo("a", "b", "c"); 
// ReferenceError: arguments is not defined at foo

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—μ„œ argumentsκ°μ²΄λŠ” λΆ€λͺ¨ μŠ€μ½”ν”„μ˜ 값을 상속 λ°›κΈ° λ•Œλ¬Έμ—, ν™”μ‚΄ν‘œ ν•¨μˆ˜μ— arguments λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ β€˜Uncaught ReferenceError: arguments is not defined ’와 같이 argumentsλ₯Ό μ •μ˜ν•  수 μ—†λ‹€λŠ” μ°Έμ‘°μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
λ”°λΌμ„œ ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ arguments에 μ ‘κ·Όν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 rest νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•΄ λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•˜λ©΄ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const foo = (...arg) => {
  const pick = arg[0];
  console.log(pick); // "a"
}

foo("a", "b", "c");


πŸ“ŽΒ μ°Έκ³ λ¬Έμ„œ

profile
ν•œμž… 크기둜 λ² μ–΄λ¨ΉλŠ” κ°œλ°œμ§€μ‹ 🍰

0개의 λŒ“κΈ€