🦁 Day25

πŸ’» 였늘 배운 것

1. ν•¨μˆ˜ μ •μ˜ 방식

// ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function mul(x, y){
  return x * y;
}

// ν•¨μˆ˜ ν‘œν˜„μ‹
let mulXY = function(x, y){
  return x * y;
}

console.log(mulXY(2,5)); // 10

// 콜백 ν•¨μˆ˜
function calc(x, y, c) {
  c(x + y);
  return x + y;
}

function write(x){
  document.write('μ½œλ°±ν•¨μˆ˜ ',x);
}

calc(10, 20, write); // μ½œλ°±ν•¨μˆ˜ 30

2. μž¬κ·€ν•¨μˆ˜(recursive function)

자기 μžμ‹ μ„ 호좜(μž¬κ·€ 호좜)ν•˜λŠ” ν•¨μˆ˜. λ°˜λ³΅λ˜λŠ” 처리λ₯Ό μœ„ν•΄ μ‚¬μš©λœλ‹€.

<μž¬κ·€ν•¨μˆ˜ μ˜ˆμ‹œ>

// factorial
function factorial(n){
    if(n <= 1) {
        return n
    }
    return n * factorial(n-1)
}

// factorial(5) == 5 * factorial(4) == 5 * 24
// factorial(4) == 4 * factorial(3) == 4 * 6
// factorial(3) == 3 * factorial(2) == 3 * 2
// factorial(2) == 2 * factorial(1) == 2 * 1
// factorial(1) == 1


// λ¬Έμžμ—΄ 뒀집기
function reverse(text){
    text += ''
    if(text.length <= 1){
        return text
    }
    return reverse(text.slice(1))+text[0]
}
reverse('hello')
'olleh'

// fibonacci
// 1, 1, 2, 3, 5, 8, 13, 21

function fib(n){
    if(n <= 2) {
        return n
    }
    return fib(n-1) + fib(n-2)
}

// μ™Όμͺ½ function만 λ”°λΌκ°”μœΌλ‹ˆ
// fib(4) == fib(3) + fib(2)
// fib(3) == fib(2) + fib(1) == 3
// fib(2) == 2
// fib(1) == 1

// 였λ₯Έμͺ½ 값인 fib(2)λ₯Ό λ‹€μ‹œ ν•΄μ•Όν•˜λŠ” 상황!!
// fib(2) == 2

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

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

  • μ¦‰μ‹œ μ‹€ν–‰ν•˜κ³  μ™ΈλΆ€μ—μ„œ μ»¨νŠΈλ‘€ν•  ν•„μš”κ°€ μ—†λŠ” ν•¨μˆ˜.
  • 단 ν•œλ²ˆλ§Œ 호좜되며 λ‹€μ‹œ ν˜ΈμΆœν•  수 μ—†λ‹€.
  • λ©”λͺ¨λ¦¬ 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ°”λ‘œ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 것듀을 μ¦‰μ‹œ μ‹€ν–‰ν•¨μˆ˜λ‘œ 관리.
// 읡λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜
(function () {
  var a = 1;
  var b = 2;
  return a + b;
}());

// κΈ°λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜
(function foo() {
  let a = 3;
  let b = 5;
  return a * b;
}());

foo(); // ReferenceError: foo is not defined
// foo() ν•¨μˆ˜κ°€ κ·Έλ£Ή μ—°μ‚°μžμΈ () 내에 μžˆμœΌλ―€λ‘œ () λ°–μ—μ„œ μ°Έμ‘° ν•  수 μ—†μ–΄μ„œ μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•  수 μ—†λ‹€.

4. map() λ©”μ†Œλ“œ

λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ 인수둜 전달받은 μ½œλ°±ν•¨μˆ˜λ₯Ό 반볡 ν˜ΈμΆœν•˜κ³  μ½œλ°±ν•¨μˆ˜μ˜ λ¦¬ν„΄κ°’λ“€λ‘œ κ΅¬μ„±λœ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€. (원본배열은 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€!)

const array = [1,2,3];
const newArray = array.map(elem => elem * 2)

console.log(newArray); // [2,4,6]
console.log(array); // [1,2,3]

5. 값에 μ˜ν•œ 호좜(Call by value)

const x = [10, 20, 30];

function test(a) {
    a[0] = 10000;
}

test(x);
console.log(x); // [10000, 20, 30]

 
const y = 10;
function test(a) {
    a = 10000;
}
test(y)
console.log(y) // 10

6. '아이디 λ˜λŠ” νŒ¨μŠ€μ›Œλ“œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.' 문ꡬ의 μˆ¨μ€λœ»(?)

둜그인 μ‹€νŒ¨ν–ˆμ„ λ•Œ 보톡 '아이디 λ˜λŠ” νŒ¨μŠ€μ›Œλ“œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.'λΌλŠ” 문ꡬ가 ν‘œμ‹œλœλ‹€.
μ™œ μ•„μ΄λ””λ‚˜ νŒ¨μŠ€μ›Œλ“œ λ‘˜ 쀑에 무엇을 잘λͺ» μž…λ ₯ν–ˆλŠ”μ§€ μ•Œλ €μ£Όμ§€ μ•Šμ„κΉŒ? μ΄λŠ” λ³΄μ•ˆμƒμ˜ 이유둜, μ•„μ΄λ””λ‚˜ νŒ¨μŠ€μ›Œλ“œ λ‘˜ 쀑 μ–΄λŠ κ±Έ 잘λͺ» μž…λ ₯ν–ˆλŠ”μ§€ μœ μΆ”ν•˜λŠ” 것을 λ°©μ§€ν•˜μ—¬ ν•΄ν‚Ή λ“±μ˜ μ •λ³΄λ³΄μ•ˆ 이슈 λ°œμƒμ„ 막기 μœ„ν•΄μ„œμ΄λ‹€. 예λ₯Ό λ“€μ–΄ 'tina'λΌλŠ” 아이디가 μ–΄λ– ν•œ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©λ˜κ³  μžˆμ„λ•Œ λ‹€λ₯Έ μ‚¬μ΄νŠΈμ— κ°€μ„œ 동일 아이디λ₯Ό μ‚¬μš©ν•΄μ„œ 둜그인 μ‹œλ„λ₯Ό ν•˜μ—¬ 둜그인 μ‹€νŒ¨μ‹œ 'νŒ¨μŠ€μ›Œλ“œκ°€ ν‹€λ ΈμŠ΅λ‹ˆλ‹€' 라고 μ•Œλ €μ€€λ‹€λ©΄ μ•„μ΄λ””λŠ” 맞게 μž…λ ₯ν–ˆλ‹€λŠ” 뜻이 λ˜λ―€λ‘œ'tina'λΌλŠ” μ•„μ΄λ””λ‘œ κ·Έ μ‚¬μ΄νŠΈμ— κ°€μž…μ΄ λ˜μ–΄μžˆλ‹€λŠ” 것을 μ•Œμ•„λ‚Ό 수 μžˆλ‹€. κ³„μ†λœ 둜그인 μ‹œλ„λ‘œ ν•΄λ‹Ή 계정을 μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ 될 μˆ˜λ„ 있고 ν•΄ν‚Ήμ˜ μœ„ν—˜μ„±λ„ μžˆμœΌλ―€λ‘œ ꡬ체적으둜 μ–΄λŠ 것을 잘λͺ» μž…λ ₯ν–ˆλŠ”μ§€ μ•Œλ €μ£Όμ§€ μ•ŠλŠ”λ‹€.



πŸ’­ 였늘 ν•˜λ£¨ λŠλ‚€μ 

였늘 μˆ˜μ—…μ—μ„œ Map을 λ°°μ› λŠ”λ° μ„ μƒλ‹˜μ΄ Map이 λ‚˜μ˜¨ 배경을 μ„€λͺ…ν•΄μ£Όμ…¨λ‹€.

const obj = {
  a: 'a',
  b: 'b',
}

μœ„μ™€ 같은 객체가 μžˆλ‹€κ³  ν–ˆμ„λ•Œ keys() λ˜λŠ” values()λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή 객체의 keyκ°’λ§Œ ν˜Ήμ€ valueκ°’λ§Œ μ•Œμ•„λ‚΄κ³  싢은데 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” obj.keys(), obj.values()처럼 μ“Έ 수 μ—†λ‹€. 그럼 κ·Έλ ‡κ²Œ μ‚¬μš©ν•  수 μžˆκ²Œλ” μˆ˜μ •ν•΄μ£Όλ©΄ λ˜λŠ”λ° μˆ˜μ •ν•˜λŠ”λŒ€μ‹  Map의 κ°œλ…μ„ μƒˆλ‘œ λ§Œλ“€μ—ˆλ‹€κ³  ν•œλ‹€πŸ€¦β€β™€οΈ
μžλ°”μŠ€ν¬λ¦½νŠΈλΌλŠ” μ–Έμ–΄λŠ” μ°Έ... μ•Œλ©΄ μ•Œμˆ˜λ‘ ν₯미둭기도 ν•˜μ§€λ§Œ ν•œνŽΈμœΌλ‘œλŠ” 이해할 수 μ—†λŠ” 뢀뢄도 λ§Žμ€ 것 κ°™λ‹€γ…Žγ…Ž
사싀 μˆ˜μ—…μ„ 많이 λͺ» 따라갔닀.. Map λΆ€λΆ„ 진도 λ‚˜κ°ˆλ•Œ 거의 따라가지 λͺ»ν–ˆλ‹€.. μž¬κ·€ν•¨μˆ˜μ™€ call by value 뢀뢄도 μ„€λͺ…을 λ“€μœΌλ©΄ μ΄ν•΄λŠ” λ˜λŠ”λ° λ‚˜μ—κ²Œ κ·Έκ±Έ λ‹€μ‹œ μ„€λͺ…해보라고 ν•˜λ©΄ λͺ»ν•  것 κ°™λ‹€. κ·Έλ ‡λ‹€λŠ” 건 μ™„μ „νžˆ 이해λ₯Ό λͺ»ν–ˆλ‹€λŠ” λœ»μ΄κ² μ§€...
이번주 주말에 이해λͺ»ν•œ λΆ€λΆ„ λ‹€μ‹œ λ³΄λ©΄μ„œ 곡뢀해야겠닀

profile
μ–Όλ ˆλ²Œλ ˆ ν”„λ‘ νŠΈμ—”λ“œ 개발자

3개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 12μ›” 3일

였 였늘 배운 κ²ƒν•˜κ³  제λͺ©λ“€μ΄ ν™”λ©΄ 였λ₯Έμͺ½μ— μ •λ¦¬λ˜μ–΄μ„œ λ‚˜μ˜€λŠ” κ±° λ„ˆλ¬΄ μ‹ κΈ°ν•΄μš”.. 그리고 μ—­μ‹œ λ‹€λ‹˜λ‹˜ TIL은 μ •μ„μ΄κ΅°μš”πŸ‘ μ € map이 λ‚˜μ˜¨ 이유 μ•½κ°„ λ†“μ³€λŠ”λ° 덕뢄에 μ•Œκ³  κ°‘λ‹ˆλ‹€πŸ’–

1개의 λ‹΅κΈ€