JS ν•¨μˆ˜ μ •μ˜ - JS hamsu jeong-ui

*πŸ”Study Keyword :

ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 4가지 방식 쀑 πŸ”‘ν•¨μˆ˜μ„ μ–Έλ¬Έκ³Ό πŸ”‘ν•¨μˆ˜ πŸ”‘μƒμ„±μž ν•¨μˆ˜ πŸ”‘ν™”μ‚΄ν‘œ ν•¨μˆ˜μ— λŒ€ν•΄μ„œ

ν•¨μˆ˜ μ •μ˜

  • WHAT IS❓ ν•¨μˆ˜ μ •μ˜λž€ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° 이전에 인수λ₯Ό 전달받을 λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ λ¬Έλ“€ 그리고 λ°˜ν™˜κ°’μ„ μ§€μ •ν•˜λŠ” 것을 λ§ν•œλ‹€.
  • μ •μ˜λœ ν•¨μˆ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ ν‰κ°€λ˜μ–΄
    ν•¨μˆ˜ 객체가 λœλ‹€.

ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 4가지 방식

  • λͺ¨λ‘ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” λ©΄μ—μ„œ λ™μΌν•˜μ§€λ§Œ λ―Έλ¬˜ν•˜μ§€λ§Œ μ€‘μš”ν•œ 차이가 μžˆμœΌλ‹ˆ κ·Έ 차이에 λŒ€ν•΄μ„œ 잘 μ•Œμ•„μ•Όν•œλ‹€...!

1. ν•¨μˆ˜ μ„ μ–Έλ¬Έ

<script>
function add(x,y){
  return x+y;
}
</script>

2. ν•¨μˆ˜ ν‘œν˜„μ‹

<script>
const add = function(){
  return x+y;
}
</script>

3. Function μƒμ„±μž ν•¨μˆ˜

<script>
const add = new Function('x', 'y', 'return x+y');
</script>

4. ν™”μ‚΄ν‘œ ν•¨μˆ˜

<script>
const add = (x, y) => x+y;
</script>

- 1. ν•¨μˆ˜ μ„ μ–Έλ¬Έ

  • ν•¨μˆ˜ 선언문은 ν•¨μˆ˜ λ¦¬ν„°λŸ΄κ³Ό ν˜•νƒœκ°€ λ™μΌν•˜μ§€λ§Œ
    ν•¨μˆ˜ 선언문은 ν•¨μˆ˜ 이름을 μƒλž΅ν•  수 μ—†λ‹€.
  • ν•¨μˆ˜ 선언문은 ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문이닀.
<script>
//ν•¨μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜λͺ… μƒλž΅ν•  수 μ—†λ‹€λŠ” 것에 주의!
function add(x,y){
  return x+y;
}
//ν•¨μˆ˜ μ°Έμ‘°
console.dir(add)// f add(x, y) , dir은 ν•¨μˆ˜μ˜ 객체의 ν”„λ‘œνΌν‹°κΉŒμ§€ 좜λ ₯ν•΄μ£ΌλŠ” λͺ…λ Ήμ–΄
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>

-ν•¨μˆ˜ μ„ μ–Έλ¬Έμ˜ <μ˜ˆμ‹œ1>

Q. ν•¨μˆ˜ 선언문은 ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문인데 λ³€μˆ˜μ— 할당이 λ˜λŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€?

<script>
//ν•¨μˆ˜ μ„ μ–Έλ¬Έ, λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” κ²ƒμ²˜λŸΌ 보인닀?!
cosnt add = function add(x,y){
  return x+y;
}
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>

A. μ΄μœ λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ½”λ“œμ˜ λ¬Έλ§₯에 따라 κΈ°λͺ… ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ 두 κ°€μ§€μ˜ 경우둜 λ‚˜λˆ μ„œ ν•΄μ„ν•œλ‹€.
1. ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문인 ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ ν•΄μ„ν•˜λŠ” 경우
2. ν‘œν˜„μ‹μΈ 문인 ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ ν•΄μ„ν•˜λŠ” 경우

<script>
//ν•¨μˆ˜ 이름이 μžˆλŠ” κΈ°λͺ… ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ€ 해석될 κ°€λŠ₯성이 2가지
// 1. ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ λ‹¨λ…μœΌλ‘œ μ‚¬μš© => ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ 해석
function funcDeclare(){
  console.log('λ‚˜λŠ” ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ 해석'); 	
}
funcDeclare();
//2. ν•¨μˆ˜ λ¦¬ν„°λŸ΄ 값을 ν‰κ°€λ˜λŠ” λ¬Έλ§₯(λ³€μˆ˜ ν• λ‹Ή) => ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ 해석
// ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ—μ„  ν•¨μˆ˜ 이름 μƒλž΅ κ°€λŠ₯
(function fucLiteral() { console.log('λ‚˜λŠ” ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ 해석')}; );
</script>
  1. κΈ°λͺ… ν•¨μˆ˜λŠ” ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ λ‹¨λ…μœΌλ‘œ μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ ν•΄μ„ν•˜κ³ ,
  2. ν•¨μˆ˜ λ¦¬ν„ΈλŸ΄μ΄ κ°’μœΌλ‘œ ν‰κ°€λ˜μ–΄μ•Ό ν•˜λŠ” λ¬Έλ§₯(ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ λ³€μˆ˜μ— ν• λ‹Ήν•˜κ±°λ‚˜ ν”Όμ—°μ‚°μžλ‘œ μ‚¬μš©)μ—μ„ ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ ν•΄μ„ν•œλ‹€.

ν•¨μˆ˜ μ„ μ–Έλ¬Έμ˜ <μ˜ˆμ‹œ2>

Q. ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μ—λŠ” μ–΄λ–€ 차이가 μ‘΄μž¬ν•˜ν• κΉŒ?

<script>
//1. κΈ°λͺ…ν•¨μˆ˜λ‘œ λ¦¬ν„°λŸ΄μ„ λ‹¨λ…μœΌλ‘œ μ‚¬μš© => ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function foo(){console.log('foo')};
foo(); // foo
//2. ν•¨μˆ˜ λ¦¬ν„°λŸ΄ 값을 ν‰κ°€λ˜λŠ” λ¬Έλ§₯(ν”Όμ—°μ‚°μžλ‘œ μ‚¬μš©) => ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ 해석
(function bar(){console.log('bar')};);
bar(); // μ°Έμ‘° 였λ₯˜λ°œμƒ 
</script>

A. λͺ¨λ‘ ν•¨μˆ˜κ°€ μƒμ„±λ˜λŠ” 건 λ™μΌν•˜μ§€λ§Œ λ°”λ‘œ 호좜의 차이가 λ°œμƒν•œλ‹€. μœ„μ½”λ“œλ₯Ό 가지고 μ„€λͺ…ν•˜κ² λ‹€.
ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μƒμ„±λœ ν•¨μˆ˜ foo()λŠ” ν˜ΈμΆœν•  수 μžˆμœΌλ‚˜
ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μœΌλ‘œ μƒμ„±λœ ν•¨μˆ˜ bar()λŠ” 호좜 ν•  수 μ—†λ‹€.

JS ν•¨μˆ˜ μ •μ˜ - JS hamsu jeong-ui
-ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ˜ ν•¨μˆ˜μ˜ 이름은 였직 ν•¨μˆ˜ λͺΈμ²΄ λ‚΄μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλŠ” μ‹λ³„μžμ΄λ‹€.
-> μ΄λŠ” ν˜„μž¬ ν•¨μˆ˜ barλ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžκ°€ μ—†λŠ” μƒνƒœμ΄κΈ°μ— bar ν•¨μˆ˜λ₯Ό 호좜 ν•  수 μ—†λ‹€.

  • Q. πŸ™‹β€β™‚οΈ : ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ˜ ν•¨μˆ˜ 이름이 였직 ν•¨μˆ˜ λͺΈμ²΄ λ‚΄μ—μ„œλ§Œ μ°Έμ‘°ν•œκ³ μ˜€...?
    πŸ€·β€β™‚οΈ : 그럼 ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ ν•¨μˆ˜ fooλŠ” μ–΄λ–»κ²Œ μ΄λ¦„μœΌλ‘œ 호좜 ν•œκ±°μ˜..❓❓❓❓
  • A. πŸ™†β€β™‚οΈ : 여기에 ν˜ΈμΆœν•œ ν•¨μˆ˜ fooλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ— 엔진이 μ•”λ¬΅μ μœΌλ‘œ μƒμ„±ν•œ μ‹λ³„μžμ΄κΈ° λ•Œλ¬Έμ— κ°€λŠ₯닀ꡬ...❕❕❕❕
  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν•¨μˆ˜ 선언문을 해석해 ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•˜κ³  ν•¨μˆ˜ 이름과 λ™μΌν•œ μ΄λ¦„μ˜ μ‹λ³„μžλ₯Ό λ§Œλ“ λ‹€.
    JS ν•¨μˆ˜ μ •μ˜ - JS hamsu jeong-ui
  • μ΄λ•Œ ν•¨μˆ˜ 이름은 ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλ§Œ μœ νš¨ν•œ μ‹λ³„μžμ΄λ―€λ‘œ ν•¨μˆ˜ 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžκ°€ ν•„μš”ν•˜λ‹€.
  • λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μƒμ„±λœ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ 이름과 λ™μΌν•œ μ΄λ¦„μ˜ μ‹λ³„μžλ₯Ό 'μ•”λ¬΅μ μœΌλ‘œ μƒμ„±ν•˜κ³  거기에 'ν•¨μˆ˜ 객체λ₯Ό ν• λ‹Ή'ν•œλ‹€.
  • λ”°λΌμ„œ ν•¨μˆ˜ μ„ μ–Έλ¬Έμ˜ μ˜μ‚¬μ½”λ“œλŠ” λ‹€μŒκ³Ό 같아진닀.
<script>
//ν•¨μˆ˜ μ„ μ–Έλ¬Έ 
cosnt add = function add(x,y){//ν•¨μˆ˜ 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ΄λ¦„κ³Ό 같은 μ‹λ³„μž 생성 ν›„ ν•¨μˆ˜ 객체λ₯Ό ν• λ‹Ή
  return x+y;
}
//ν•¨μˆ˜ ν˜ΈμΆœμ€ ν•¨μˆ˜ 이름이 μ•„λ‹Œ ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžμžλΌλŠ” κ²ƒμ˜ 주의!!
console.log(add(2, 5))// 7
</script>

JS ν•¨μˆ˜ μ •μ˜ - JS hamsu jeong-ui
-ν•¨μˆ˜λŠ” ν•¨μˆ˜ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλΌ
ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžλ‘œ ν˜ΈμΆœν•œλ‹€.
->μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν•¨μˆ˜ 선언문을 ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ³€ν™˜ν•΄ ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•œλ‹€κ³  생각할 수 μžˆλ‹€.
ν•˜μ§€λ§Œ μ„ μ–Έλ¬Έκ³Ό ν‘œν˜„μ‹μ΄ μ •ν™•νžˆ λ™μΌν•˜κ²Œ λ™μž‘ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.


- 2. ν•¨μˆ˜ ν‘œν˜„μ‹

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” κ°’μ²˜λŸΌ λ³€μˆ˜μ— ν• λ‹Ήν•  μˆ˜λ„ 있고 ν”„λ‘œνΌν‹° 값이 될 μˆ˜λ„ 있으며 λ°°μ—΄μ˜ μš”μ†Œκ°€ 될 수 μžˆλ‹€.
  • 이처럼 κ°’μ˜ μ„±μ§ˆμ„ κ°–λŠ” 객체λ₯Ό '일급객체'λΌν•˜λŠ”λ° μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜κ°€ λ°”λ‘œ '일급 객체'이닀.
  • κ°’μ²˜λŸΌ 자유둭게 μ‚¬μš©ν•  수 μžˆλŠ” 일급객체인 ν•¨μˆ˜λŠ” ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ μƒμ„±ν•œ ν•¨μˆ˜ 객체λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ”λ° μ΄λŸ¬ν•œ ν•¨μˆ˜ μ •μ˜ 방식을 ν•¨μˆ˜ ν‘œν˜„μ‹μ΄λΌ λΆ€λ₯Έλ‹€.
<script>
//ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function add(x,y){
  return x+y;
}
console.log(add(2, 5))// 7
//ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜ν•œ addν•¨μˆ˜λ₯Ό ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ°”κΎΈμ–΄ μ •μ˜
const add = function (x, y){
  return x+y;
}
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>

-ν•¨μˆ˜ ν‘œν˜„μ‹ <μ˜ˆμ‹œ>

Q. ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ— ν•¨μˆ˜ 이름을 뢙일 μˆ˜λ„ μƒλž΅ν•  수 μžˆλ‹€κ³ ?

<script>
//ν•¨μˆ˜ 이름이 μžˆλŠ” κΈ°λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹
const add = function foo(x,y){
  return x+y;
}
// ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžλ‘œ ν˜ΈμΆœν•΄μ•Όν•œλ‹€.
console.log(add(2, 5))// 7
//ν•¨μˆ˜ 이름이 μ—†λŠ” 읡λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹
const add = function (x, y){
  return x+y;
}
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>

A. ν•¨μˆ˜ ν‘œν˜„μ‹μ€ 읡λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹κ³Ό κΈ°λͺ…ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ‚˜λ‰œλ‹€.

  • ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ˜ ν•¨μˆ˜ 이름을 μƒλž΅ν•œ 읡λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
  • 읡λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹μ€ ν•¨μˆ˜μ— μ‹λ³„μžκ°€ 주어지지 μ•Šκ³  κΈ°λͺ…ν•¨μˆ˜ ν‘œν˜„μ‹μ€ ν•¨μˆ˜μ˜ μ‹λ³„μžκ°€ μ‘΄μž¬ν•œλ‹€.

+) ν•¨μˆ˜ μ„ μ–Έλ¬Έ VS ν•¨μˆ˜ ν‘œν˜„μ‹ λ―Έλ¬˜ν•œ 차이

  • ν•¨μˆ˜ 생성 μ‹œμ κ³Ό ν˜Έμ΄μŠ€νŒ…μ—μ„œ λ―Έλ¬˜ν•œ 차이가 μžˆμŒμ„ 인지!
  • ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜μ™€ ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜μ˜ μƒμ„±μ‹œμ μ΄ λ‹€λ₯΄λ‹€.
  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ - ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문으둜 ν˜Έμ΄μŠ€νŒ…μ˜ 영ν–₯을 λ°›μ•„ μ–΄λ””μ„œλ“  ν˜ΈμΆœμ΄λœλ‹€.
  • ν•¨μˆ˜ ν‘œν˜„μ‹ - ν‘œν˜„μ‹μΈ 문으둜 ν˜Έμ΄μŠ€νŒ…μ— 영ν–₯을 받지 μ•Šμ•„ ν•¨μˆ˜ μ½”λ“œμ— 도달해야 μƒμ„±λ˜κ³  호좜이 λœλ‹€.
<script>
console.dir(sayHi);//μ°Έμ‘° κ°€λŠ₯
console.dir(sayHello);//μ°Έμ‘° λΆˆκ°€λŠ₯
sayHi()//호좜 κ°€λŠ₯
sayHello()//호좜 λΆˆκ°€λŠ₯
//ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ λ§Œλ“  ν•¨μˆ˜
sayHi() // ν˜Έμ΄μŠ€νŒ… -> 호좜 κ°€λŠ₯
function sayHi(){
	console.log('hi');
}
//ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ λ§Œλ“  ν•¨μˆ˜
const sayHello() = function sayHi(){ // ν•΄λ‹Ή μ½”λ“œμ— 도달해야 μƒμ„±λ˜κ³  
 	console.log('hi');// μ½”λ“œ 도달 ν›„ μ‚¬μš©ν•  수 μžˆλ‹€.
}
// μ—¬κΈ°μ„  호좜과 μ°Έμ‘°κ°€ κ°€λŠ₯ν•˜λ‹€
</script>

-ν•¨μˆ˜ μ„ μ–Έλ¬Έ

  • λͺ¨λ“  선언문이 κ·Έλ ‡λ“― ν•¨μˆ˜ μ„ μ–Έλ¬Έ μ—­μ‹œ 1>λŸ°νƒ€μž„ 이전에 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•˜κ³  ν•¨μˆ˜ 이름과 λ™μΌν•œ μ‹λ³„μžμ— ν• λ‹ΉκΉŒμ§€ μ™„λ£Œλœ μƒνƒœμ΄λ‹€.
  • λ”°λΌμ„œ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜λŠ” μ„ μ–Έλ¬Έ 이전에도
    2>ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…
    에 μ˜ν•΄ 호좜과 μ°Έμ‘°κ°€ κ°€λŠ₯ν•˜λ‹€.
  • μ΄λ ‡κ²Œ ν•¨μˆ˜ 선언문이 μ½”λ“œμ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” 것, 'ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…'이라고 ν•œλ‹€.

-ν•¨μˆ˜ ν‘œν˜„μ‹

  • ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜ μ„ μ–Έλ¬Έκ³Ό λ³€μˆ˜ 할당문을 ν•œ λ²ˆμ— κΈ°μˆ ν•œ μΆ•μ•½ ν‘œν˜„κ³Ό λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€.
  • λ³€μˆ˜ ν• λ‹Ήλ¬Έμ˜ 값은 할당문이 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— ν‰κ°€λ˜λ“―μ΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ ν•¨μˆ˜λ¦¬ν„°λŸ΄λ„ 1>할당문이 μ‹œν–‰λ˜λŠ” μ‹œμ μ— ν‰κ°€λ˜μ–΄ ν•¨μˆ˜ 객체가 λœλ‹€.
  • λ”°λΌμ„œ ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄ ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜λŠ” 것이 μ•„λ‹ˆλΌ 2>λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… λ°œμƒν•œλ‹€

- 3. μƒμ„±μž ν•¨μˆ˜

  • WHAT IS❓ μƒμ„±μž ν•¨μˆ˜λž€ 객체λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•œλ‹€.
    객체λ₯Ό μƒμ„±ν•˜λŠ” 방식에 객체 λ¦¬ν„°λŸ΄ 방식 이외에 λ‹€μ–‘ν•œ 방법이 μžˆλ‹€.

HOW TO USE❕❓ - μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ κΈ°λ³Έ μ œκ³΅ν•˜λŠ” 빌트인 ν•¨μˆ˜μΈ Function μƒμ„±μž ν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜ λͺ©λ‘κ³Ό ν•¨μˆ˜ λͺΈμ²΄λ₯Ό λ¬Έμžμ—΄λ‘œ μ „λ‹¬ν•˜λ©΄μ„œ newμ—°μ‚°μž(없어도 κ°€λŠ₯)와 ν•¨κ»˜ ν˜ΈμΆœν•˜λ©΄ ν•¨μˆ˜κ°μ²΄λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€.

<script>
//μƒμ„±μž ν•¨μˆ˜
const add = new Function('x', 'y', 'return x + y');
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>

-μƒμ„±μž ν•¨μˆ˜μ˜ <μ˜ˆμ‹œ>

  • Function μƒμ„±μž ν•¨μˆ˜λ‘œ μƒμ„±ν•˜λŠ” ν•¨μˆ˜λŠ” ν΄λ‘œμ €λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ” λ“± ν•¨μˆ˜ μ„ μ–Έλ¬Έμ΄λ‚˜ ν‘œν˜„μ‹μœΌλ‘œ μƒμ„±ν•œ ν•¨μˆ˜μ™€ λ‹€λ₯΄κ²Œ λ™μž‘ν•œλ‹€.
<script>
//ν•¨μˆ˜ μ„ μ–Έλ¬Έ μ‹œ ν΄λ‘œμ €
const add1 =(function (){
  const a = 10;
  return function (x, y){
    return x + y;
  };
}());
console.log(add1(1,3)) // 13
//μƒμ„±μž ν•¨μˆ˜μ‹œ ν΄λ‘œμ €
const add2 =(function (){
  const a = 10;
  return new Function('x', 'y', 'return x+y');
}());
console.log(add2(1,3)) // λ³€μˆ˜ aμ°Έμ‘° 였λ₯˜?
</script>

- 4. ν™”μ‚΄ν‘œ ν•¨μˆ˜

  • WHAT IS❓ ν™”μ‚΄ν‘œ ν•¨μˆ˜λž€ ν•¨μˆ˜ μ„ μ–Έμ‹œ ν•¨μˆ˜ ν‘œν˜„κ³Ό λ‚΄λΆ€ λ™μž‘μ„ κ°„λž΅ν™” ν•œ 것이닀.
  • HOW TO USE❕❓ ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 함상 읡λͺ…ν•¨μˆ˜λ‘œ μ •μ˜ν•œλ‹€.
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” function ν‚€μ›Œλ“œ λŒ€μ‹  ν™”μ‚΄ν‘œλ₯Ό μ‚¬μš©ν•΄ 더 κ°„λž΅ν•œ λ°©λ²•μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€.
<script>
//ν™”μ‚΄νŽ΄γ…› ν•¨μˆ˜
const add = (x, y) => x + y;
//ν•¨μˆ˜ 호좜
console.log(add(2, 5))// 7
</script>
  • μƒμ„±μžν•¨μˆ˜λ‘œλŠ” ν™”μ‚΄ν‘œν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†κ³ 
    기쑴의 ν•¨μˆ˜μ™€ this 바인딩 방식이 λ‹€λ₯΄κ³  prototype ν”„λ‘œνΌν‹°κ°€ μ—†μœΌλ©° arguments 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

*πŸ’‘conclusion

  • ν•¨μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ λ―Έλ¬˜ν•œ 차이, μ‹€ν–‰μ‹œμ κ³Ό ν˜Έμ΄μŠ€νŒ…μ— λŒ€ν•΄μ„œ 잘 μ•Œμ•„λ‘μž‘!
  • ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ€ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° 전에 λ°˜λ“œμ‹œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” κ·œμΉ™μ„ λ¬΄μ‹œν•˜λ―€λ‘œ ν•¨μˆ˜ μ„ μ–Έλ¬Έ λŒ€μ‹  ν•¨μˆ˜ ν‘œν˜„μ‹μ„ 주둜 μ΄μš©ν•˜λ„λ‘ν•˜μž₯!

#πŸ“‘Study Source

  1. μ±… - λ”₯λ‹€μ΄λΈŒ μžλ°”μŠ€ν¬λ¦½νŠΈ