음악, 삶, 개발
JS 의 pass-by-value 또는 pass-by-reference 본문
< 참고 강좌 : 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' }