[ JS ] ν•¨μˆ˜

메이·2024λ…„ 4μ›” 21일

JavaScript

λͺ©λ‘ 보기
4/12
post-thumbnail

πŸ”Ž ν•¨μˆ˜

01. 데이터와 호좜

function hello() {
  return 'Hello~'
}

// ν•¨μˆ˜ 데이터(Data)
console.log(hello)   //f hello() { return 'Hello~' }
console.log(typeof hello)   //function

// ν•¨μˆ˜ 호좜(Call)
console.log(hello())   // Hello~
console.log(typeof hello())   // String

02. κΈ°λͺ… / 읡λͺ… ν•¨μˆ˜

  • κΈ°λͺ… ν•¨μˆ˜ - function 이름() {}
const h1El = document.querySelector('h1')

function handler() {
  console.log(h1El.textContent) // handler ν•¨μˆ˜λŠ” textContentλ₯Ό 좜λ ₯ν•œλ‹€.
}
h1El.addEventListener('click', handler)
  • 읡λͺ… ν•¨μˆ˜ - function() {}
const h1El = document.querySelector('h1')

h1El.addEventListener('click', function() {
  console.log(h1El.textContent)
})
  

03. ν˜Έμ΄μŠ€νŒ… (Hoisting)

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ ν•΄μ„λ˜λŠ”λ°, ν•¨μˆ˜ 선언문은 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κΈ° 전에 μ‚¬μš©ν•΄λ„ μ—λŸ¬λ‚˜μ§€ μ•ŠλŠ”λ‹€.
  • ν•¨μˆ˜ ν‘œν˜„μ‹μ€ μž‘μ„±λœ κ·ΈλŒ€λ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— ν˜Έμ΄μŠ€νŒ… ν˜„μƒμ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.

✍ 예제1

// ν˜Έμ΄μŠ€νŒ… (λŒμ–΄μ˜¬λ €μ§€λ‹€)
hello()   // Hello~
wolrd ()   // Error..

// ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function hello () {
  console.log('Hello~)
}
              
// ν•¨μˆ˜ ν‘œν˜„μ‹
const world = function () {
  console.log('World~')
}
              

πŸ‘€ ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ μž‘λ™λ˜κ²Œ ν•˜λ €λ©΄?

// ν•¨μˆ˜ ν‘œν˜„μ‹
const world = function () {
  console.log('World~')
}

// ν˜Έμ΄μŠ€νŒ… (λŒμ–΄μ˜¬λ €μ§€λ‹€)
hello()   // Hello~
wolrd ()   // World~

// ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function hello () {
  console.log('Hello~')
}
                    

✍ 예제2

// ν•¨μˆ˜ 이름은 보톡 λͺ…λ Ήν˜•μœΌλ‘œ 이름을 μ§“λŠ”λ°(동사가 μ•žμ— λ‚˜μ˜€λŠ” ꡬ쑰)
// ν•¨μˆ˜μ˜ μ΄λ¦„λ§Œ 보고 과일의 λͺ©λ‘μ„ μ£Όμ„Έμš” λΌλŠ” 것을 μ–΄λŠ 정도 μ˜ˆμΈ‘ν•  수 μžˆλ‹€. = 좔상화

const fruits = getfruits()
const movies = getmovies()

function getfruits() {
  // μ½”λ“œ1
  // μ½”λ“œ2
  // μ½”λ“œ3
  // ...
  // return fruits
}

const getmovies = function() {
  // μ½”λ“œ1
  // μ½”λ“œ2
  // μ½”λ“œ3
  // ...
  // return fruits
}

λ¬Έμ œμ—†μ΄ μž‘λ™λ¨
Error...



04. λ°˜ν™˜κ³Ό μ’…λ£Œ

  • return ν‚€μ›Œλ“œ λ‹€μŒμ— μžˆλŠ” μ½”λ“œλŠ” 싀행될 수 μ—†λ‹€.
    즉, 데이터λ₯Ό ν•¨μˆ˜ λ°–μœΌλ‘œ 내보냄(λ°˜ν™˜)κ³Ό λ™μ‹œμ— ν•¨μˆ˜λ₯Ό μ’…λ£Œν•˜λŠ” 역할을 ν•œλ‹€.

✍ 예제1

function sayHi(name) {
  return `Hi, ${name}~`
  console.log('λ™μž‘ν•˜μ§€ μ•ŠμŒ!')
}   // functionν‚€μ›Œλ“œλ₯Ό ν†΅ν•΄μ„œ sayHiλΌλŠ” 이름을 κ°€μ§„ ν•˜λ‚˜μ˜ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³ μžˆλ‹€.

const h = sayHi('Neo')
// 'Neo'λΌλŠ” 문자 데이터λ₯Ό nameμ΄λΌλŠ” λ³€μˆ˜κ°€ 데이터λ₯Ό λ°›μ•„μ„œ μ‚¬μš©λ¨
console.log(h)   // Hi, Neo~
console.log(sayHi('Neo'))   // Hi, Neo~

✍ 예제2

function a() {
  // return
}
function b() {
  return
}
function c() {
  return undefined
}

console.log(a())
console.log(b())
console.log(c())

// λͺ¨λ‘ undefined

05. μΈμˆ˜μ™€ λ§€κ°œλ³€μˆ˜

  • 인수(Argument)와 λ§€κ°œλ³€μˆ˜(Parameter)λŠ” μ—„μ—°νžˆ λ‹€λ₯Έ κ°œλ…μ΄μ§€λ§Œ
    항상 같이 λ“±μž₯ν•œλ‹€.

✍ 예제1

function add(a, b) {
  return a + b
}

console.log(add(2, 1))   // 3 (2와 1은 인수)
console.log(add(7, 4))   // 11
console.log(add('A', 'B'))   //AB

✍ 예제2

// λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’
function add(a, b=1) {
  return a + b
}

console.log(add(2))   // 3
console.log(add(2, undefined))   // 3
console.log(add())   // NaN

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

  • return ν‚€μ›Œλ“œμ™€ μ€‘κ΄„ν˜Έ({})λ₯Ό μƒλž΅ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ°˜ν™˜ν•  λ°μ΄ν„°λ§Œ λͺ…μ‹œν•œλ‹€.
  • return ν‚€μ›Œλ“œκ°€ μ—†μœΌλ©΄ μ€‘κ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μ—†λ‹€.

✍ 예제1

// 일반 ν•¨μˆ˜
function hello1() {
  return 'Hello~'
}
const add1 = function(a, b) {
  return a + b
}
const log1 = function (c) {
  console.log(c)
}

//ν™”μ‚΄ν‘œ ν•¨μˆ˜
const hello2 = () => 'Hello~'
const add2 = (a, b) => a + b
const log2 = c => {
  console.log(c)
}   // λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜λ°–μ— μ—†κ³  기본값이 없을 λ•Œ, ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—μ„œ μ†Œκ΄„ν˜Έ μƒλž΅ κ°€λŠ₯!

✍ 예제2

// ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ μ€‘κ΄„ν˜Έ μƒλž΅
const a = x => {
  return x * x
}
const b = x => x * x   // μœ„μ˜ ν•¨μˆ˜λž‘ 같은 ꡬ쑰

const c = x => {
  console.log(x * x)
  return x * x
}   // μ€‘κ΄„ν˜Έ λ‹€μŒμ— return이 λ°”λ‘œ λ‚˜μ˜€μ§€ μ•Šμ•„μ„œ μ€‘κ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μ—†μŒ

const d = () => {
  return [1, 2, 3]
}
const e = () => [1, 2, 3]   // μœ„μ˜ ν•¨μˆ˜λž‘ 같은 ꡬ쑰

const g = () => {
  return { a : 1 }  // 객체 데이터
}
const h = {} => ({a : 1})  // μ†Œκ΄„ν˜Έλ‘œ ν•œλ²ˆ 더 λ¬Άμ–΄μ€Œ

07. 콜백 (Callback)

  • μ–΄λ–€ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆκ±°λ‚˜ νŠΉμ • μ‹œμ μ— λ„λ‹¬ν–ˆμ„ λ•Œ μ‹œμŠ€ν…œμ—μ„œ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜
  • ν•¨μˆ˜κ°€ λ’€μͺ½μ—μ„œ ν˜ΈμΆœλœλ‹€.
  • () => {}

✍ 예제1

const a = callback => {
  console.log('A')
  callback()
}

const b = () => {
  console.log('B')
}

a(b)
// A
// B

08. μ¦‰μ‹œμ‹€ν–‰ν•¨μˆ˜ (IIFE)

  • ν•¨μˆ˜λ₯Ό λ§Œλ“€μžλ§ˆμž λ°”λ‘œ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν• κ±°λΌλ©΄ ν•¨μˆ˜μ˜ 이름을 λ§Œλ“€μ§€ μ•Šκ³ 
    λ§Œλ“€λ©΄μ„œ λ°”λ‘œ ν˜ΈμΆœν•  수 있게 ν•˜λ©΄ 쒋을 것 같은 μƒν™©μ—μ„œ μ“°μž„

✍ 예제1

// ν•¨μˆ˜ μ •μ˜(ν‘œν˜„)
const double = () => {
  // ...
}
// ν•¨μˆ˜ μ‹€ν–‰
double()



// μ¦‰μ‹œμ‹€ν–‰ν•¨μˆ˜
// ;(ν•¨μˆ˜)()
;(function)() {
  // ...
})()

// 'μ¦‰μ‹œμ‹€ν–‰ν•¨μˆ˜'의 λ‹€μ–‘ν•œ μ‚¬μš©λ²•
;(() => {})()         // (ν™”μ‚΄ν‘œν•¨μˆ˜)()
;(function () {})()   // (μΌλ°˜ν•¨μˆ˜)()
;(function () {}())   // (μΌλ°˜ν•¨μˆ˜())
;!function () {}()    // !μΌλ°˜ν•¨μˆ˜()
;+function () {}()    // +μΌλ°˜ν•¨μˆ˜()

09. 호좜 μŠ€μΌ€μ€„λ§

✍ 예제1

// μ½œλ°±μ„ ν˜ΈμΆœν•˜λŠ” 타이머 μ„€μ •
const timeout = setTimeout(() => {
  console.log('Hello~')
}, 5000)

// 타이머λ₯Ό μ·¨μ†Œ
const btnEl.document.querySelector('button')
btnEl.addEventListener('click', () => {
  console.log('타이머 μ·¨μ†Œ!')
  clearTimeout(timeout)
})

✍ 예제2

// μ½œλ°±μ„ 반볡 ν˜ΈμΆœν•˜λŠ” 타이머 μ„€μ •
const timeout = setInterval(() => {
  console.log('Hello~')
}, 3000)

// 타이머λ₯Ό μ·¨μ†Œ
const btnEl.document.querySelector('button')
btnEl.addEventListener('click', () => {
  console.log('타이머 μ·¨μ†Œ!')
  clearInterval(timeout)
})
profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자λ₯Ό κΏˆκΎΈλŠ” μ½”λ¦°μ΄β‚Šβ‹† β˜Ύβ‹†βΊ

0개의 λŒ“κΈ€