>웹 프론트엔드 >JS 튜토리얼 >JavaScript 함수 매개변수 전달 방법에 대한 자세한 설명

JavaScript 함수 매개변수 전달 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-22 14:54:221517검색

이 글에서는 참고할만한 좋은 JavaScript 함수 매개변수 전달 방법을 주로 소개합니다.

JavaScript는 변수 객체 를 사용하여 변수의 수명을 추적합니다. 기본 유형 값은 변수 객체에 직접 저장되는 반면, 참조 유형 값은 메모리에서 실제 객체의 저장 위치를 ​​가리키는 포인터로 변수 객체에 저장됩니다.

기본 유형 값 전달

기본 유형 값을 매개변수에 전달하면 전달된 값이 지역 변수(예: 명명된 매개변수 또는 인수)에 복사됩니다. 개체의 요소).

function addOne (num) {
 num++;
 return num;
}
var count = 1;
var result = addOne(count);
console.log(count); //1
console.log(result); //2

위의 예에서는 변수 count의 값이 함수의 num 매개변수에 전달되어 함수에 사용됩니다. 변수 count와 매개변수 num은 동일하지만 두 개의 독립 변수입니다. 함수 내에서 매개변수 num의 값을 변경해도 함수 외부의 변수 count 값에는 영향을 미치지 않습니다.

그래서 JavaScript 함수의 기본 유형 값 매개변수는 값으로 전달됩니다.

참조 유형 값 전송

function setName (obj) {
 obj.name = 'Nicholas';
}
var person = new Object();
setName(person);
console.log(person.name); //'Nicholas'

위의 예에서 변수 person의 값은 함수의 매개변수 obj, 즉 매개변수 obj에 전달됩니다. 함수 내부에 이름 속성을 추가하면 함수의 매개변수 obj로 인해 함수 외부의 변수 person도 이름 속성을 얻게 됩니다. 결과를 보면 JavaScript 함수의 참조 유형 값 매개변수가 참조로 전달되는 것으로 보입니다.

단, 그렇지 않습니다. person 변수의 값은 참조형 값이므로 object 변수의 값은 메모리에 있는 실제 객체의 주소(또는 포인터)로 간주될 수 있습니다. 매개변수를 전달한 후 매개변수 obj의 값은 메모리에 있는 개체의 주소이기도 합니다. 따라서 함수에서 매개변수 obj의 값이 참조하는 개체는 운영 변수 person의 값이 참조하는 개체와 동일합니다.

function setName (obj) {
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}
var person = new Object();
var result = setName(person);
console.log(person.name); //'Nicholas'
console.log(result.name); //'Greg'

매개변수가 참조로 전달되는 경우 위 예에서 함수는 매개변수 obj의 값이 참조하는 객체를 변경하고 해당 변수 person의 값이 참조하는 객체도 변경합니다. 함수 작성 방식을 변경하면 매개변수를 값으로 전달하는 방식을 이해하는 데 더 도움이 될 수 있습니다.

function setName () {
 var obj = arguments[0];
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}

person 변수와 obj 매개변수의 값은 메모리 내에서 동일한 객체의 주소이지만 두 개의 독립 변수입니다. 함수에서 매개변수 obj의 값을 변경하여 메모리의 다른 객체를 가리키도록 하면 person 변수의 값은 변경되지 않고 여전히 원래 객체를 가리킵니다.

따라서 JavaScript에서 함수의 참조 유형 값 매개변수는 값으로 전달됩니다.

결론

위 내용은 JavaScript 함수 매개변수 전달 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.