μκ³ λ¦¬μ¦μ νλ©΄μ μλμ κ°μ ν¨μλ₯Ό μμ±νμ¬, κ°μ λ³κ²½νκ³ λ μμ μμΉλ₯Ό λ°κΎΈλ €κ³ νλ€.
function changeNum(n1, n2) {
if (n1 < n2) {
n1 = n2 + 1
} else {
n2 = n1 + 1
}
}
const arr = [2, 3, 9]
let [a, b, c] = arr
changeNum(a, b)
console.log(arr) // [2, 3, 9]
νμ§λ§ μλμλ λ€λ₯΄κ² changeNum
μ μμΉλ₯Ό λ°κΎΈμ§ λͺ»νκ³ arr
λ μλ³Έ κ·Έλλ‘λ₯Ό μΆλ ₯νλ€.
μ ν¨μ n1, n2μ κ°μ λ³κ²½νμ§ λͺ»νλ κ±ΈκΉ? π₯²
μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έ νμ
(primitive types)μ κ°μ μν μ λ¬(Pass by Value) λ°©μ
μΌλ‘ ν¨μμ μ λ¬λκΈ° λλ¬Έμ΄λ€. μ΄λ ν¨μμ κ°μ μ λ¬ν λ, μ€μ κ°μ 볡μ¬λ³Έμ΄ μ λ¬λλ©°, ν¨μ λ΄μμ 맀κ°λ³μμ κ°μ λ³κ²½ν΄λ μΈλΆμ λ³μμλ μν₯μ λ―ΈμΉμ§ μλλ€λ κ²μ μλ―Ένλ€.
λ°λΌμ changeNum ν¨μ λ΄μμ n1, n2μ κ°μ λ³κ²½ν΄λ a, b μλ³Έμλ μν₯μ μ£Όμ§ μλλ€.
κ·ΈλΌ μ΄λ»κ² λ°κΏ μ μμκΉ?
μ°Έμ‘°μ μν μ λ¬(Pass by Reference)
κ°μ²΄λ λ°°μ΄κ³Ό κ°μ μ°Έμ‘° νμ
μ μ°Έμ‘°μ μν μ λ¬(Pass by Reference)
λ°©μμΌλ‘ μλνλ€. μ΄ λ°©μμμλ λ³μκ° μ€μ λ°μ΄ν°κ° μλ, λ°μ΄ν°κ° μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ°Έμ‘°νλ€.
ν¨μμ μ°Έμ‘° νμ μ κ°μ μΈμλ‘ μ λ¬ν λ, μ λ¬ λλ κ²μ μ€μ λ°μ΄ν°μ 볡μ¬λ³Έμ΄ μλλΌ λ°μ΄ν°κ° μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμμ μ°Έμ‘°μ΄λ€. λ°λΌμ ν¨μ λ΄μμ μ°Έμ‘°λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ³κ²½νλ©΄ μλ³Έ λ°μ΄ν°μλ λ°μμ΄ λλ€.
μ΄λ¬ν λ°©μμ μ΄μ©νμ¬ n1κ³Ό n2 κ°μ λ³κ²½νλ©΄ κ°μ²΄λ λ°°μ΄μ ν΅ν΄ κ°μ μ λ¬νκ³ , ν¨μ λ΄μμ κ°μ²΄μ μμ±μ΄λ λ°°μ΄μ μμλ₯Ό λ³κ²½ν μ μλ€.
function changeNum(arr) {
if (arr[0] < arr[1]) {
arr[0] = arr[1] + 1
} else {
arr[1] = arr[0] + 1
}
}
const arr = [2, 3, 9]
changeNum(arr)
console.log(arr) // [4, 3, 9]
κ°μ μν μ λ¬(Pass by Value)
μκΉ λ§νλ―μ΄ κΈ°λ³Έ νμ
(primitive type)μΈ μ«μ, λ¬Έμμ΄, boolean, null, undefined, Symbol, BigIntμ κ°μ μν μ λ¬(Pass by Value)
λ°©μμΌλ‘ μ²λ¦¬νλ€. μ΄λ ν¨μμ κΈ°λ³Έ νμ
μ κ°μ μΈμλ‘ μ λ¬ν λ, μ€μ κ°μ΄ μλ κ·Έ κ°μ 볡μ¬λ³Έμ΄ ν¨μ λ΄λΆλ‘ μ λ¬λλ€λ μλ―Έμ΄λ€.
λ°λΌμ, ν¨μ λ΄μμ 맀κ°λ³μμ κ°μ λ³κ²½ν΄λ μλ³Έ λ³μμ κ°μλ μν₯μ λ―ΈμΉμ§ μλλ€.
μλλ κ°μ μν μ λ¬μ λν κ°λ¨ν μμ μ½λλ€.
function modifyValue(x) {
x = 5
console.log("ν¨μ λ΄λΆ: ", x) // ν¨μ λ΄λΆ: 5
}
let a = 3
modifyValue(a)
console.log("ν¨μ μΈλΆ: ", a) // ν¨μ μΈλΆ: 3
μμ½
- μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έ νμ
(primitive type)μ
κ°μ μν μ λ¬(Pass by Value)
λ°©μμΌλ‘ μ²λ¦¬λλ€. μ¦, ν¨μ λ΄μμ 맀κ°λ³μμ κ°μ λ³κ²½ν΄λ μλ³Έ λ³μμ κ°μλ μν₯μ λ―ΈμΉμ§ μλλ€. - λ°λ©΄ κ°μ²΄λ λ°°μ΄ κ°μ μ°Έμ‘° νμ
(reference type)μ
μ°Έμ‘°μ μν μ λ¬(Pass by Reference)
λ°©μμΌλ‘ μ²λ¦¬λλ€.