음악, 삶, 개발

JS 의 pass-by-value 또는 pass-by-reference 본문

개발 Web/JS

JS 의 pass-by-value 또는 pass-by-reference

Lee_____ 2021. 3. 11. 01:37

< 참고 강좌  : youtu.be/e_lU39U-5bQ?t=467 >


pass-by-value 

pass-by-reference

 

C++ 에서 지겹게 들었던 말이다. C++ 처럼 함수 인자에 &가 붙거나 *가 붙거나 그렇지는 않고,

비교적 단순하다.

primitive type 은 pass-by-value 로,

object type 은 pass-by-reference 로 무조건 전달된다.

 

아래의 코드를 보자.

const n = 1

function changeNum(n) {

    n = n + 1

}

changeNum(n)

console.log(n) // 여전히 1

primitive type 이기때문에 value 로 넘겨져서, 함수 내부에서 바꾸려해도 바뀌지않는다.

이때는 return 하는 함수로 만들어, 다시 원래 변수에 대입해주어야한다.

let n = 1

function changeNum(n) {

    return n + 1

}

n = changeNum(n)

console.log(n) // 드디어 2

하지만 변수가 객체나 배열일 경우는 이야기가 달라진다.

이때는 reference 로 넘겨지므로, 함수 내부에서 변경을 가할수있다.

 

배열인 경우..

let a = [1, 2, 3, 4]

function change(arr) {

    arr[0] = 100

}

change(a)

console.log(a) // [100, 2, 3, 4]

객체인 경우..

let o = { name : 'lee' }

function change(obj) {

    obj.name = 'park'

}

change(o) 

console.log(o) // { name : 'park' }