관리 메뉴

eazyseon

12μž₯ ν•¨μˆ˜ λ³Έλ¬Έ

πŸ“•μ±…/λ”₯λ‹€μ΄λΈŒ

12μž₯ ν•¨μˆ˜

eazyseon 2023. 11. 23. 23:27
λ°˜μ‘ν˜•

12.1 ν•¨μˆ˜λž€?

과정을 문으둜 κ΅¬ν˜„ν•˜κ³  μ½”λ“œ λΈ”λ‘μœΌλ‘œ κ°μ‹Έμ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ μ •μ˜ν•œ 것이닀. 

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

x,y => λ§€κ°œλ³€μˆ˜ 

return => λ°˜ν™˜κ°’

2,5=>인수

 

12.2 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

μ‹€ν–‰ μ‹œμ μ„ κ°œλ°œμžκ°€ κ²°μ •ν•  수 있고 λͺ‡ λ²ˆμ΄λ“  μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©° μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±μ„ 높이고 μ½”λ“œμ˜ 신뒰성을 높인닀.

ν•¨μˆ˜μ˜ 이름은 μžμ‹ μ˜ 역할을 잘 μ„€λͺ…ν•΄μ•Ό ν•œλ‹€. λ‚΄λΆ€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜μ§€ μ•Šκ³ λ„ ν•¨μˆ˜μ˜ 역할을 νŒŒμ•…ν•  수 있게 도와 μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚¨λ‹€.

 

12.3 ν•¨μˆ˜ λ¦¬ν„°λŸ΄

 

12.4 ν•¨μˆ˜ μ •μ˜

ν•¨μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ ν‘œν˜„μ‹, function μƒμ„±μž ν•¨μˆ˜, ν™”μ‚΄ν‘œ ν•¨μˆ˜

 

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

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

ν•¨μˆ˜ 이름을 μƒλž΅ν•  수 μ—†λ‹€.

 

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

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” 객체 νƒ€μž…μ˜ 값이닀. 

κ°’μ²˜λŸΌ λ³€μˆ˜μ— ν• λ‹Ήν•  μˆ˜λ„ 있고, ν”„λ‘œνΌν‹° 값이 될 μˆ˜λ„ 있으며 λ°°μ—΄μ˜ μš”μ†Œκ°€ 될 μˆ˜λ„ μžˆλ‹€. κ°’μ˜ μ„±μ§ˆμ„ κ°–λŠ” 객체λ₯Ό 일급 객체라고 ν•˜λ©°,

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” 일급 객체닀. 즉, ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ 자유둭게 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μ˜λ―Έλ‹€.

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

 

- ν•¨μˆ˜ 생성 μ‹œμ κ³Ό ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ… 

//μ„ μ–Έλ¬Έ
function add (x,y) {
  return x + y;
}

//ν‘œν˜„μ‹ 
const sub = function (x,y) {
  return x - y;
}

 

ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜λŠ” μ„ μ–Έλ¬Έ 이전에 ν˜ΈμΆœν•  수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ ν‘œν˜„μ‹μœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜λŠ” ν‘œν˜„μ‹ 이전에 ν˜ΈμΆœν•  수 μ—†λ‹€. 

μ™œ? ν•¨μˆ˜μ˜ 생성 μ‹œμ μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

μ„ μ–Έλ¬Έμ˜ κ²½μš°μ—λŠ” λŸ°νƒ€μž„ 이전에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ λ¨Όμ € μ‹€ν–‰λœλ‹€. ν•¨μˆ˜ 이름과 λ™μΌν•œ μ΄λ¦„μ˜ μ‹λ³„μžλ₯Ό μ•”λ¬΅μ μœΌλ‘œ μƒμ„±ν•˜κ³  

μƒμ„±λœ ν•¨μˆ˜ 객체λ₯Ό ν• λ‹Ήν•œλ‹€. κ·Έλž˜μ„œ λŸ°νƒ€μž„ ν™˜κ²½μ—μ„œ ν•¨μˆ˜ μ„ μ–Έλ¬Έ 이전에 ν˜ΈμΆœν•  수 μžˆλ‹€. 

 

 

 

12.4 ν•¨μˆ˜ 호좜

-λ§€κ°œλ³€μˆ˜μ™€ 인수

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

add (2,5);

console.log(x,y)//ReferenceError: x is not defined

 

ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 값을 ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ λ‚΄λΆ€λ‘œ 전달할 ν•„μš”κ°€ μžˆλŠ” 경우, λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 인수λ₯Ό μ „λ‹¬ν•œλ‹€. 

λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 있고 μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€.

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

console.log(add (2)); //NaN

 

xμ—λŠ” 2κ°€ μ „λ‹¬λ˜μ§€λ§Œ, λ§€κ°œλ³€μˆ˜ yμ—λŠ” μΈμˆ˜κ°€ μ—†λ‹€. yλŠ” undefined둜 μ΄ˆκΈ°ν™”λœ μƒνƒœμ΄λ‹€. 

2+undefinedμ΄λ―€λ‘œ NaN이 λ°˜ν™˜λœλ‹€. 

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

console.log(add (2,5,7));

 

λ§€κ°œλ³€μˆ˜λ³΄λ‹€ μΈμˆ˜κ°€ 더 λ§Žμ€ 경우 초과된 μΈμˆ˜λŠ” λ¬΄μ‹œλœλ‹€. 

초과된 μΈμˆ˜λŠ” λ²„λ €μ§€λŠ” 것이 μ•„λ‹Œ arguments객체의 ν”„λ‘œνΌν‹°λ‘œ λ³΄κ΄€λœλ‹€. 

function add (x,y) {
  console.log(arguments); 
  //{ '0': 2, '1': 5,'2': 7}
  
  return x + y;
}

console.log(add (2,5,7));

 

-인수 확인

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

console.log(add(2)); //NaN
console.log(add('a','b')) //'ab'

 

1. μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ 인수의 κ°œμˆ˜κ°€ μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€. 

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

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

console.log(add(2)); //TypeError: μΈμˆ˜λŠ” λͺ¨λ‘ 숫자 값이어야 ν•΄μš”!
console.log(add('a','b')) //TypeError: μΈμˆ˜λŠ” λͺ¨λ‘ 숫자 값이어야 ν•΄μš”!

 

λŸ°νƒ€μž„μ— μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ 되기 λ•Œλ¬Έμ— 정적 νƒ€μž…μ„ μ„ μ–Έν•  수 μžˆλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μƒμœ„ ν™•μž₯을 λ„μž…ν•΄ λΆ€μ μ ˆν•œ ν˜ΈμΆœμ„ λ°©μ§€ν•  수 μžˆλŠ” 것도 ν•˜λ‚˜μ˜ 방법이닀!

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

console.log(add(2)); //2
console.log(add());//0

 

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

λ§€κ°œλ³€μˆ˜μ— 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•˜μ„ κ²½μš°μ™€ undefinedλ₯Ό μ „λ‹¬ν•œ κ²½μš°μ—λ§Œ μœ νš¨ν•˜λ‹€.

 

-λ§€κ°œλ³€μˆ˜μ˜ μ΅œλŒ€ 개수

λ§€κ°œλ³€μˆ˜λŠ” μ΅œλŒ€ λͺ‡ κ°œκΉŒμ§€ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μ„κΉŒ? 이상적인 λ§€κ°œλ³€μˆ˜ κ°œμˆ˜λŠ” 0개이며 μ μ„μˆ˜λ‘ μ’‹λ‹€. 

λ”°λΌμ„œ μ΅œλŒ€ 3개 이상을 λ„˜μ§€ μ•ŠλŠ” 것을 ꢌμž₯ν•œλ‹€. κ·Έ 이상 ν•„μš”ν•˜λ‹€λ©΄ 객체λ₯Ό 인수둜 μ „λ‹¬ν•˜λŠ” 것이 μœ λ¦¬ν•˜λ‹€! 

 

-λ°˜ν™˜λ¬Έ

ν•¨μˆ˜λŠ” return ν‚€μ›Œλ“œμ™€ ν‘œν˜„μ‹μœΌλ‘œ 이뀄진 λ°˜ν™˜λ¬Έμ„ μ‚¬μš©ν•΄ μ‹€ν–‰ κ²°κ³Όλ₯Ό ν•¨μˆ˜ μ™ΈλΆ€λ‘œ λ°˜ν™˜ν•œλ‹€. λ°˜ν™˜λ¬Έμ€ 두 κ°€μ§€ 역할을 ν•œλ‹€. 

1) ν•¨μˆ˜μ˜ 싀행을 μ€‘λ‹¨ν•˜κ³  ν•¨μˆ˜ λͺΈμ²΄λ₯Ό λΉ μ Έλ‚˜κ°„λ‹€. 

function add (x, y) {
  return x + y;
  console.log('μ‹€ν–‰λ˜μ§€ μ•ŠμŒ!')
}

console.log(add(1,2)); //3

 

2)λ°˜ν™˜λ¬Έμ€ return ν‚€μ›Œλ“œ 뒀에 μ˜€λŠ” ν‘œν˜„μ‹μ„ 평가해 λ°˜ν™˜ν•œλ‹€. ν‘œν˜„μ‹μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

function add (x, y) {
  return;
}

console.log(add(1,2)); //undefined

 

λ°˜ν™˜λ¬Έμ€ μƒλž΅ κ°€λŠ₯ν•˜λ©° λ§ˆμ§€λ§‰ λ¬ΈκΉŒμ§€ μ‹€ν–‰ν•œ ν›„ μ•”λ¬΅μ μœΌλ‘œ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€. 

function add (x, y) {
}

console.log(add(1,2)); //undefined

 

return ν‚€μ›Œλ“œμ™€ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  ν‘œν˜„μ‹ 사이에 μ€„λ°”κΏˆμ΄ 있으면 μ„Έλ―Έμ½œλ‘  μžλ™ μ‚½μž… κΈ°λŠ₯이 λ™μž‘ν•˜λ©° 

λ°˜ν™˜λ¬Έμ€ ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

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

console.log(add(1,2)); //undefined

 

12.6 참쑰에 μ˜ν•œ 전달과 μ΅œλΆ€ μƒνƒœμ˜ λ³€κ²½

function changeVal(primitive,obj){
  primitive += 100;
  obj.name = 'kim';
}

var num = 200;
var person = { name : 'Lee'};

console.log(num);//200
console.log(person);//{ name: 'Lee' }

changeVal(num,person);

console.log(num);//200
console.log(person);//{ name: 'kim' }

 

μ›μ‹œ νƒ€μž… μΈμˆ˜λŠ” κ°’ μžμ²΄κ°€ λ³΅μ‚¬λ˜μ–΄ λ§€κ°œλ³€μˆ˜μ— μ „λ‹¬λ˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ λͺΈμ²΄μ—μ„œ κ·Έ 값을 변경해도 원본은 ν›Όμ†λ˜μ§€ μ•ŠλŠ”λ‹€. 

객체 νƒ€μž… μΈμˆ˜λŠ” μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ λ§€κ°œλ³€μˆ˜μ— μ „λ‹¬λ˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ λͺΈμ²΄μ—μ„œ μ°Έμ‘° 값을 톡해 객체λ₯Ό λ³€κ²½ν•  경우 원본이 ν›Όμ†λœλ‹€. 

-> ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ λͺΈμ²΄ λ‚΄λΆ€λ‘œ μ „λ‹¬ν•œ μ°Έμ‘° 값에 μ˜ν•΄ 원본 객체가 λ³€κ²½λ˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ λ°œμƒν•œλ‹€. 

 

ν•΄κ²° 방법은? 

1. 객체λ₯Ό λΆˆλ³€ 객체둜 λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•œλ‹€.

2. κΉŠμ€ 볡사λ₯Ό μ‚¬μš©ν•œλ‹€. 

 

12.7 λ‹€μ–‘ν•œ ν•¨μˆ˜μ˜ ν˜•νƒœ 

-μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

ν•¨μˆ˜ μ •μ˜μ™€ λ™μ‹œμ— μ¦‰μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜/ 단 ν•œλ²ˆλ§Œ 호좜되며 λ‹€μ‹œ ν˜ΈμΆœν•  수 μ—†λ‹€. 

(function () {
  var a = 1;
  var b = 2;
  return a + b;
}()); //3

 

λ°˜λ“œμ‹œ ()둜 κ°μ‹Έμ•Όν•œλ‹€.

 

-μž¬κ·€ ν•¨μˆ˜

ν•¨μˆ˜κ°€ 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” 것을 μž¬κ·€ 호좜이라고 ν•œλ‹€. μž¬κ·€ ν•¨μˆ˜λŠ” λ°˜λ³΅λ˜λŠ” 처리λ₯Ό μœ„ν•΄ μ‚¬μš©ν•œλ‹€. 

μžμ‹ μ„ λ¬΄ν•œ μž¬κ·€ ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— 멈좜 수 μžˆλŠ” νƒˆμΆœ 쑰건을 λ°˜λ“œμ‹œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. μ—†μœΌλ©΄ μŠ€νƒ μ˜€λ²„ν”Œλ‘œ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. 

function countdown(n) {
  for(let i = n; i>= 0; i--)
    console.log(i)
}

countdown(10)

//μž¬κ·€ ν•¨μˆ˜ μ‚¬μš©
function countdown(n) {
  if(n < 0) return;
  console.log(n);
  countdown(n-1);
}

countdown(10);

 

-쀑첩 ν•¨μˆ˜

ν•¨μˆ˜ 내뢀에 μ •μ˜λœ ν•¨μˆ˜

λ°˜μ‘ν˜•
Comments