자바스크립트는 가치에 의한 전달 언어입니다. 그러나 객체의 경우 값은 참조입니다. 따라서 예를 들어 int를 매개변수로 함수에 전달하고 함수에서 해당 값을 증가시키면 해당 값은 호출자의 컨텍스트에서 업데이트되지 않습니다 -
예시
let i = 0; function increment(x) { x = x + 1 console.log(x) } increment(i) console.log(i)
출력
1 0
객체를 전달하고 함수 컨텍스트에서 해당 객체의 참조를 업데이트하면 객체에 영향을 미치지 않습니다. 그러나 개체의 내부를 변경하면 개체에 반영됩니다.
예시
let obj = {'foo': 'bar'}; function updateRef(x) { // x's local ref gets updates, doesn't affect obj x = {} } function addHelloWorld(y) { // Add new prop to object referenced by y y['hello'] = 'world'; } console.log(obj) updateRef(obj) console.log(obj) addHelloWorld(obj) console.log(obj)에서 참조하는 객체에 대한 소품
출력
{ foo: 'bar' } { foo: 'bar' } { foo: 'bar', hello: 'world' }
개체 참조 변경은 개체에 영향을 미치지 않습니다. 지역 변수 x가 재할당되었습니다. 그러나 두 번째 함수에서 y는 obj 개체를 참조하고 해당 개체의 내부 상태를 변경했습니다. 이로 인해 원본 개체가 변경되었습니다.