본문 바로가기

Study/Today I Learn

[TIL] 2019.04.09

call by value, call by reference

var val1 = 20
var val2 = {
    name : "papico",
    age: 20
}

function val1Func(param) {
    param = param + 10
}

function val2Func(param) {
    param.age = 30
}

val1Func(val1) // call by value
val2Func(val2) // call by referance

console.log(val1) // 20
console.log(val2.age) // 30

재귀 알고리즘

전형적인 재귀 알고리즘인 피보나치 수열과, 팩토리얼 함수를 만들어 보았다.

factorial

const facto = a => a <= 1 ? 1 : a * facto(a - 1)

fibonacci

const fibo = num => (0 === num || 1 === num) ? 1 : fibo(num-1) + fibo(num-2);

이진탐색 알고리즘

let num = 5
let arr = [1, 2, 3, 4, 5]

const bSearch = (start, end) => {
    let mid = parseInt((start + end) / 2)
    if(arr[mid] === num) {
        return mid
    }
    return (num < arr[mid]) ? bSearch(start, mid - 1) : bSearch(mid + 1, end)
}

함수 선언식 & 함수 표현식

함수 선언식

function foo(){
}

foo()

함수 표현식

var foo = function() {
}

foo()

함수 선언식은 호이스팅의 영향을 받지만, 함수 표현식은 호이스팅의 영향을 받지 않는다.
호이스팅과 관련된 내용은 따로 포스팅에서 정리하겠다.

얕은 복사(shallow copy) & 깊은 복사(deep copy)

얕은 복사는 가장 상위에 있는 객체만 새로 생성하고, 내부 객체는 참조 관계인 경우
깊은 복사는 내부 객체 모두 샛로 생성하는 경우를 말한다.

Shallow copy

Shallow

Deep copy

Deep

Object.assign & Object.freeze

Object.assign

Object.assign 는 객체를 복사할 때 주로 사용한다.

const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

사용시 주의할 점은 객체 내부의 객체는 얕은 복사가 된다는 점이다.

let obj = {a : 1, b : {c : 2}}
let obj2 = Object.assign({}, obj)
console.log(obj2.b.c === obj.b.c) // true

Object.freeze

Object.freeze 는 주어진 객체를 불변 객체로 만든다. 하지만 객체 내부의 객체는 변경가능하다.

const user1 = {
  name: 'Lee',
  address: {
    city: 'Seoul'
  }
};
Object.freeze(user1)
user1.name = "Kim"
console.log(user1)
// {name: "Lee", address: {city: 'Seoul'}}
user1.address.city = "Busan"
console.log(user1)
// {name: "Lee", address: {city: 'Busan'}}

python // 연산자

// 는 몫을 구하는 연산자 이다.

출처

https://poiemaweb.com/js-immutability
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
https://www.zerocho.com/category/JavaScript/post/5750d384b73ae5152792188d