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

JavaScript에서 값으로 전달 및 참조로 전달을 설명하시겠습니까?

<시간/>

값으로 전달

값으로 전달 , 함수는 변수의 값을 인수로 직접 전달하여 호출됩니다. 함수 내부의 인수를 변경해도 함수 외부에서 전달된 변수에는 영향을 미치지 않습니다. 자바스크립트는 항상 값으로 전달 따라서 변수 값을 변경해도 기본 프리미티브(문자열 또는 숫자)는 변경되지 않습니다.

다음 예에서 변수 'a'는 값 1을 할당했습니다. 그러나 'change' 함수 내에서는 값 2를 할당받았습니다. 자바스크립트는 항상 값에 의한 전달이기 때문에 , 표시된 출력은 '1'이지만 '2'가 아닙니다.

예시

<html>
<body>
<script>
   let a = 1;
   let change = (val) => {
      val = 2
   }
   change(a);
   document.write(a);
</script>
</body>
</html>

출력

1

참조로 전달

함수를 호출하기 위해 인수 대신 주소가 전달되는 경우가 있습니다. 이때 함수 ​​내부의 값을 변경하면 함수 외부에서 전달된 변수에 영향을 줍니다. 이를 참조에 의한 전달이라고 합니다. . 자바스크립트에서 대부분 배열과 객체는 참조로 전달을 따릅니다.

다음 예에서 'a'라는 객체는 'change' 함수 외부에서 선언됩니다. 여기서 예 2와 같이 변수 'a'가 변경되었지만 값 2가 할당되지 않았음을 주의해야 합니다. 참조에 의한 전달 돌연변이 일 때 발생 발생했습니다.

예시-1

<html>
<body>
<script>
   let a = {num:1};
   let change = (val) => {
      val.num = 2
   }
   change(a);
  document.write(JSON.stringify(a));
</script>
</body>
</html>

출력

{"num":2}


돌연변이 대신 다음 예에서 , 변수 'a'가 할당되었습니다. 값이 2입니다. 따라서 값으로 전달 발생하며 외부 변수에는 영향을 미치지 않습니다.

예시-2

<html>
<body>
<script>
   let a = {num : 1};
   let change = (val) => {
      val = {num :2};
   }
   change(a);
   document.write(JSON.stringify(a));
</script>
</body>
</html>

출력

{"num":1}