JiYoung Dev πŸ–₯

[μžλ°”μŠ€ν¬λ¦½νŠΈ] λ³€μˆ˜ / ν•¨μˆ˜ / λ§€κ°œλ³€μˆ˜ / return λ³Έλ¬Έ

full stack/JavaScript

[μžλ°”μŠ€ν¬λ¦½νŠΈ] λ³€μˆ˜ / ν•¨μˆ˜ / λ§€κ°œλ³€μˆ˜ / return

Shinjio 2023. 2. 15. 18:22

2023.02.15 ν•™μŠ΅ λ‚΄μš©

 

< 참고자료 >

 

ν•¨μˆ˜

 

ko.javascript.info

λ³€μˆ˜(Variables)

- λ³€μˆ˜λž€, μ–΄λ–€ κ°’(데이터)을 μ €μž₯ν•˜κΈ° μœ„ν•΄ μ“°μ΄λŠ” 이름이 뢙은 μƒμž(μ €μž₯μ†Œ)

- λŒ€λ‹€μˆ˜μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μžλ‚˜ μ„œλ²„λ‘œλΆ€ν„° μž…λ ₯받은 정보λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘

- 예 : 온라인 μ‡Όν•‘λͺ° → 판맀 쀑인 μƒν’ˆμ΄λ‚˜ μž₯λ°”κ΅¬λ‹ˆ λ“±μ˜ 정보, μ±„νŒ… μ• ν”Œλ¦¬μΌ€μ΄μ…˜ → μ‚¬μš©μžμ˜ 정보, λ©”μ‹œμ§€ λ“±

- λ³€μˆ˜λŠ” μ΄λŸ¬ν•œ 정보λ₯Ό μ €μž₯ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©

λ³€μˆ˜ μ„ μ–Έν•˜κΈ° let

let  λ³€μˆ˜μ΄λ¦„ ;

 

λ³€μˆ˜μ΄λ¦„μ— 데이터(κ°’)λ₯Ό μ €μž₯ν•˜λ €λ©΄ ν• λ‹Ή μ—°μ‚°μž ' = ' μ‚¬μš© (μ΄ˆκΈ°ν™”)

let  λ³€μˆ˜μ΄λ¦„ ;
λ³€μˆ˜μ΄λ¦„  =  κ°’ ;

 

λ³€μˆ˜λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— 값을 넣어쀄 수 있음

let  λ³€μˆ˜μ΄λ¦„  =  κ°’;

 

λ³€μˆ˜ μ„ μ–Έ

 

ν•œ 쀄에 μ—¬λŸ¬ 개의 λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 있음

// λΉ„κΆŒμž₯

let  user  =  'John',  age  =  25,  message  =  'Hello' ;

 

μ΄λŸ¬ν•œ μž‘μ„±μ€ μ½”λ“œκ°€ 짧아 보이긴 ν•˜μ§€λ§Œ ꢌμž₯ν•˜μ§€ μ•ŠμŒ. 가독성을 μœ„ν•΄ ν•œ 쀄에 ν•˜λ‚˜μ˜ λ³€μˆ˜λ₯Ό μž‘μ„±ν•  것

// ꢌμž₯

let  user  =  'John' ;
let  age  =  25 ;
let  message  =  'Hello' ;

 

β€» let λŒ€μ‹  var

var λ˜ν•œ letκ°€ 거의 λ™μΌν•˜κ²Œ μž‘λ™ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ“°μž„. λ‹€λ§Œ, var은 였래된 λ°©μ‹μœΌλ‘œ μ΅œκ·Όμ—λŠ” let을 주둜 μ‚¬μš©. κ·ΈλŸ¬λ‚˜ κ³Όκ±° μ½”λ“œλ₯Ό ν•΄μ„ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•Œμ•„λ‘˜ ν•„μš”λŠ” 있음

 

였래된 var

 

ko.javascript.info

λ³€μˆ˜ μˆ˜μ •ν•˜κΈ°

λ³€μˆ˜μ—λŠ” μ–΄λ–€ 값이든 넣을 수 있고, μ›ν•˜λŠ” 만큼 값을 λ³€κ²½ν•  μˆ˜λ„ 있음

μ•„λž˜μ™€ 같이 값이 λ³€κ²½λ˜λ©΄, 이전 λ°μ΄ν„°λŠ” λ³€μˆ˜μ—μ„œ 제거됨

let message ;  // λ³€μˆ˜ μ„ μ–Έ
message  =  'Hello!' ;  // μ΄ˆκΈ°ν™” 
message  =  'World!' ;  // 값이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 

 

β€» λ³€μˆ˜λŠ” ν•œ 번만 μ„ μ–Έν•΄μ•Ό 함. 두 번 μ„ μ–Έν•˜λ©΄ μ—λŸ¬ λ°œμƒ

λ³€μˆ˜ 이름짓기

κΌ­ μ§€μΌœμ•Ό ν•˜λŠ” κ·œμΉ™

- JavaScript μ‹λ³„μžλŠ” '문자(a-z, A-Z)', 밑쀄(_) ν˜Ήμ€ λ‹¬λŸ¬ 기호($)둜 μ‹œμž‘ν•΄μ•Ό 함

- 첫 κΈ€μžλŠ” μˆ«μžκ°€ 될 수 μ—†μŒ. 두 번째 κΈ€μžλΆ€ν„°λŠ” 숫자(0-9)도 κ°€λŠ₯

- 특수문자, 킀릴 문자, ν•œμž, ν•œκΈ€ 등도 λ³€μˆ˜λͺ…에 μ‚¬μš©ν•  수 μžˆμœΌλ‚˜ μ˜μ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꡭ제적 κ΄€μŠ΅μ΄λ―€λ‘œ μ˜μ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ

  λ§Œλ“œλŠ” 것을 ꢌμž₯

- λŒ€λ¬Έμžμ™€ μ†Œλ¬Έμž ꡬ별 

- μ˜ˆμ•½μ–΄λŠ” λ³€μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†μŒ (if, for, let, class, return, function λ“±)

지킀면 쒋은 κ·œμΉ™

- 의미 μ—†λŠ” 이름은 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 게 μ’‹μŒ. λ‚˜μ€‘에 μ–΄λ–€ 값을 μ €μž₯ν•΄ λ’€λŠ”μ§€ 찾기도 μ–΄λ ΅κ³  ν™œμš©ν•˜κΈ°λ„ 어렀움

- λ„ˆλ¬΄ 좔상적인 이름은 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 게 μ’‹μŒ (ex. name)

- λͺ¨λ“  λ³€μˆ˜μ˜ 이름은 'camelCase'둜 μ“°λŠ” 것이 μ’‹μŒ. λ³€μˆ˜λͺ…μ—λŠ” 띄어쓰기가 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μ²« 번째 κΈ€μžλŠ” μ†Œλ¬Έμžλ‘œ ν•˜κ³ ,

  띄어쓰기가 μžˆλŠ” 각 λ‹¨μ–΄μ˜ 첫 문자λ₯Ό λŒ€λ¬Έμžλ‘œ ν‘œκΈ°ν•˜λŠ” 방식

참고자료

Airbnb의 μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€νƒ€μΌ κ°€μ΄λ“œ

Google의 μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€νƒ€μΌ κ°€μ΄λ“œ

w3schools.com의 μžλ°”μŠ€ν¬λ¦½νŠΈ μŠ€νƒ€μΌ κ°€μ΄λ“œ

StandardJS μ½”λ“œ μŠ€νƒ€μΌ

Idiomatic.JS

λ³€μˆ˜ Scope 

μ§€μ—­λ³€μˆ˜

블둝문 λ‚΄μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜μΈ 지역 λ³€μˆ˜(local variable)λŠ” 블둝문 μ•ˆμ—μ„œλ§Œ μ ‘κ·Όν•  수 있음

function  showMessage() { // 블둝문 (Block Statement)
  let  message  =  'μ•ˆλ…•ν•˜μ„Έμš”!' ;  // 지역 λ³€μˆ˜
  alert(message) ;
}

showMessage() ;  // μ•ˆλ…•ν•˜μ„Έμš”!

alert(message) ; // ReferenceError: message (ν•¨μˆ˜ λ°–μ—μ„œλŠ” μ§€μ—­λ³€μˆ˜ μ‚¬μš© λΆˆκ°€λŠ₯)

μ™ΈλΆ€λ³€μˆ˜ (μ „μ—­ λ³€μˆ˜ (global variable))

ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ‘œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ™ΈλΆ€ λ³€μˆ˜(outer variable)에 μ ‘κ·Όν•  수 있으며 μˆ˜μ •λ„ κ°€λŠ₯

μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 파일 μ „μ²΄μ—μ„œ μ‚¬μš©ν•  수 있음

let  userName  =  'John' ;  // μ™ΈλΆ€ λ³€μˆ˜

function showMessage() {
  userName  =  'Bob' ;  // μ™ΈλΆ€ λ³€μˆ˜ μˆ˜μ •
  let  message  =  'Hello, '  +  userName ;
  alert(message) ;
}

alert(userName) ;  // ν•¨μˆ˜ 호좜 μ „μ΄λ―€λ‘œ John
showMessage() ; 
alert(userName) ;  // ν•¨μˆ˜μ— μ˜ν•΄ Bob으둜 κ°’ λ³€κ²½

 

- μ™ΈλΆ€ λ³€μˆ˜λŠ” 지역 λ³€μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 있음.

- ν•¨μˆ˜ 내뢀에 μ™ΈλΆ€ λ³€μˆ˜μ™€ λ™μΌν•œ 이름을 가진 λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆλ‹€λ©΄, λ‚΄λΆ€ λ³€μˆ˜λŠ” μ™ΈλΆ€ λ³€μˆ˜λ₯Ό κ°€λ¦°λ‹€.

- λ³€μˆ˜λŠ” μ—°κ΄€λ˜λŠ” ν•¨μˆ˜ 내에 μ„ μ–Έν•˜κ³ , μ „μ—­ λ³€μˆ˜λŠ” λ˜λ„λ‘ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŒ. 비ꡐ적 κ·Όλž˜μ— μž‘μ„±λœ μ½”λ“œλ“€μ€ λŒ€λΆ€λΆ„

  μ „μ—­λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜ μ΅œμ†Œν•œμœΌλ‘œλ§Œ μ‚¬μš©. λ‹€λ§Œ ν”„λ‘œμ νŠΈ μ „λ°˜μ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λŠ” μ „μ—­ λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” 것이 μœ μš©ν•œ

  κ²½μš°λ„ 있음

 

μ§€μ—­λ³€μˆ˜, μ „μ—­λ³€μˆ˜ 문제

 

μœ„μ˜ 그림의 μ½”λ“œλ₯Ό μ‹€ν–‰ν•œ κ²°κ³ΌλŠ”? 였λ₯˜κ°€ λ°œμƒν•œλ‹€. 

WHY? 4번째 μ€„κΉŒμ§€λŠ” myFunction()에 λŒ€ν•œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œ κ²ƒμœΌλ‘œ 문제 μ—†μŒ. 6번째 쀄인 myFunction()을 μ‹€ν–‰ν•˜λ©΄ λ‘œμ»¬λ³€μˆ˜ x 에 λ¬Έμžμ—΄ μ½”λ“œμž‡μ΄ ν• λ‹Ήλ˜κ³ , κ·Έ μ•„λž«μ€„λ‘œ λ„˜μ–΄κ°€ λ‘œμ»¬λ³€μˆ˜ x에 λ¬Έμžμ—΄ μ„μ§€λ‘œκ°€ 할당됨.(ν• λ‹Ήλ§Œ 될 뿐 좜λ ₯은 ν•˜μ§€ μ•ŠμŒ) κ·Έλ¦¬κ³ λ‚˜μ„œ 7번째 쀄인 console.log(x) μ‹€ν–‰. κ·ΈλŸ¬λ‚˜ xλŠ” myFunction() λ‚΄μ—μ„œ μ •μ˜λœ λ‘œμ»¬λ³€μˆ˜μ΄λ―€λ‘œ ν•¨μˆ˜ λ°–μ—μ„œλŠ” μ‚¬μš© λΆˆκ°€λŠ₯. λ”°λΌμ„œ 였λ₯˜ λ°œμƒ

 

ν•¨μˆ˜ (function)

μž¬μ‚¬μš©ν•˜κΈ°λ₯Ό μ›ν•˜λŠ” κΈ°λŠ₯을 λ‹΄λŠ” 방법

- 슀크립트λ₯Ό μž‘μ„±ν•˜λ‹€ 보면 μœ μ‚¬ν•œ λ™μž‘μ„ ν•˜λŠ” μ½”λ“œκ°€ μ—¬λŸ¬ κ³³μ—μ„œ ν•„μš”ν•  λ•Œκ°€ 많음

- μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈμ΄λ‚˜ λ‘œκ·Έμ•„μ›ƒμ„ ν–ˆμ„ λ•Œ μ•ˆλ‚΄ λ©”μ‹œμ§€λ₯Ό λ³΄μ—¬μ£ΌλŠ” λ™μž‘ 같은 κ²½μš°κ°€ 이에 해당함

- ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” μ£Όμš” 'ꡬ성 μš”μ†Œ(building block)'으둜 ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ 쀑볡 없이 μœ μ‚¬ν•œ λ™μž‘μ„ ν•˜λŠ” μ½”λ“œλ₯Ό

  μ—¬λŸ¬ 번 ν˜ΈμΆœν•  수 있음

ν•¨μˆ˜ μ„ μ–Έ function 

ν•¨μˆ˜ 선언은 functionμ΄λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ‹œμž‘ν•΄μ„œ ν•¨μˆ˜ 이름을 μž‘μ„±ν•˜κ³ , μ†Œκ΄„ν˜Έλ₯Ό μ—΄μ–΄ νŒŒλΌλ―Έν„°λ₯Ό μž‘μ„±

μ—¬λŸ¬ 개의 νŒŒλΌλ―Έν„°λŠ” μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•΄μ„œ μž‘μ„±

function  ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜,  λ§€κ°œλ³€μˆ˜) {
  λͺ…λ Ή ;
}

 

ν•¨μˆ˜ μ„ μ–Έ

ν•¨μˆ˜ 이름 짓기

- ν•¨μˆ˜λŠ” μ–΄λ–€ λ™μž‘μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ½”λ“œλ₯Ό λͺ¨μ•„놓은 κ²ƒμ΄λ―€λ‘œ ν•¨μˆ˜μ˜ 이름은 λŒ€κ°œ 동사

- ν•¨μˆ˜ 이름은 κ°€λŠ₯ν•œ ν•œ κ°„κ²°ν•˜κ³  λͺ…ν™•ν•΄μ•Ό ν•˜λ©° ν•¨μˆ˜κ°€ μ–΄λ–€ λ™μž‘μ„ ν•˜λŠ”μ§€ μ„€λͺ…ν•  수 μžˆμ–΄μ•Ό 함

- ν•¨μˆ˜ ν•˜λ‚˜λŠ” λ™μž‘ ν•˜λ‚˜λ§Œ λ‹΄λ‹Ήν•΄μ•Ό 함

λ§€κ°œλ³€μˆ˜(parameter)

λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μž„μ˜μ˜ 데이터λ₯Ό ν•¨μˆ˜ μ•ˆμ— 전달할 수 있음

 

λ§€κ°œλ³€μˆ˜ μ‚¬μš©ν•œ ν•¨μˆ˜

 

λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ ν•¨μˆ˜

 

μ—¬λŸ¬κ°œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ ν•¨μˆ˜

 

μ—¬λŸ¬κ°œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ ν•¨μˆ˜

κΈ°λ³Έκ°’(undefined) 

ν•¨μˆ˜ 호좜 μ‹œ λ§€κ°œλ³€μˆ˜μ— 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ κ·Έ 값은 undefinedκ°€ 됨

function  showMessage(from,  text) {
  alert(from  +  " :  "  +  text) ;
}

showMessage("Ann") ;  // Ann : undefined

 

λ§€κ°œλ³€μˆ˜μ— 값을 μ „λ‹¬ν•˜μ§€ μ•Šμ•„λ„ κ·Έ 값이 undefinedκ°€ λ˜μ§€ μ•Šκ²Œ ν•˜λ €λ©΄ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ =λ₯Ό μ‚¬μš©ν•΄ 'κΈ°λ³Έκ°’(default value)'을 μ„€μ •ν•˜λ©΄ 됨 ==> μ˜΅μ…”λ„ νŒŒλΌλ―Έν„°(optional parameter)

λ§€κ°œλ³€μˆ˜κ°€ 밀리지 μ•Šλ„λ‘ κ°€μž₯ λ’€μͺ½μ— 생성할 것

function  showMessage(from,  text  =  'no text given') {
  alert(from  +  " :  "  +  text) ;
}

showMessage("Ann") ;  // Ann : no text given

λ°˜ν™˜ κ°’(return value)

return은 ν•¨μˆ˜κ°€ λͺ…령듀을 μ‹€ν–‰μ‹œν‚€λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ 값이 될 μˆ˜λ„ 있음

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 그곳에 νŠΉμ • 값을 λ°˜ν™˜ν•˜κ²Œ ν•  수 있음. μ΄λ•Œ 이 νŠΉμ • 값을 λ°˜ν™˜ 값이라고 함

return은 ν•¨μˆ˜ λ‚΄ μ–΄λ””μ„œλ“  μ‚¬μš©ν•  수 있으며 μ‹€ν–‰ 흐름이 return을 λ§Œλ‚˜λ©΄ ν•¨μˆ˜ 싀행은 μ¦‰μ‹œ μ€‘λ‹¨λ˜κ³  ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 곳에 값을 λ°˜ν™˜ν•¨. return만 λͺ…μ‹œν•˜λ©΄ ν•¨μˆ˜κ°€ μ¦‰μ‹œ μ’…λ£Œ

 

return μ‚¬μš©

 

return μ‚¬μš©

 

리턴 ν•¨μˆ˜ 쀑단 예

 

β€» returnκ³Ό κ°’ 사이에 μ ˆλŒ€ 쀄을 μ‚½μž…ν•˜μ§€ 말 것

λ°˜ν™˜ν•˜λ €λŠ” 값이 κΈ΄ ν‘œν˜„μ‹μΈ 경우 μ•„λž˜μ˜ 쀄에 μž‘μ„±ν•˜κ³  싢을 수 μžˆμœΌλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” returnλ¬Έ 끝에 μ„Έλ―Έμ½œλ‘ μ„ μžλ™μœΌλ‘œ λ„£κΈ° λ•Œλ¬Έμ— κ΄„ν˜Έλ₯Ό μ΄μš©ν•΄ μž‘μ„±ν•΄μ•Ό 함

1.
return
  (some  +  long  +  expression  +  or  +  whatever)

2.
return ;
  (some  +  long  +  expression  +  or  +  whatever)

1κ³Ό 2λŠ” 같은 ν‘œν˜„

3. 
return (
  some  +  long  +  expression  +  or  +  whatever
)

3번과 같이 μž‘μ„±ν•΄μ•Ό 함

 

참고둜 νŠΉμ •ν•œ μ–Έμ–΄μ—μ„œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΄. JavaScriptλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€κ³  ν•΄μ„œ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠμŒ. κ·ΈλŸ¬λ‚˜ λ³€μˆ˜λ“  ν•¨μˆ˜λ“  선언을 ν•˜κ³  μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것은 μ½”λ“œμ˜ μ„±λŠ₯을 λ–¨μ–΄λœ¨λ¦¬κ³ , μ˜ˆμƒμΉ˜ λͺ»ν•œ 였λ₯˜λ‚˜ λΆˆνŽΈν•œ κ°€λ…μ„±μ˜ 원인이 될 수 있음. λΆˆν•„μš”ν•œ μ½”λ“œλŠ” 가급적 μž‘μ„±ν•˜μ§€ 말 것 ꢌμž₯!

 

return 과 console.log의 차이

return문이 μ—†λŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ undefinedκ°€ 좜λ ₯됨

return - ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³  μ–΄λ–€ 값을 λŒλ €μ£ΌλŠ” 것 (μ½˜μ†”μ— 좜λ ₯ X)

console.logλŠ” μ½˜μ†”μ— μ–΄λ–€ 값을 좜λ ₯ν•΄ μ£ΌλŠ” 것