Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript는 참조에 의한 전달 또는 값에 의한 전달 언어입니까?

<시간/>

자바스크립트는 가치에 의한 전달 언어입니다. 그러나 객체의 경우 값은 참조입니다. 따라서 예를 들어 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 개체를 참조하고 해당 개체의 내부 상태를 변경했습니다. 이로 인해 원본 개체가 변경되었습니다.