javascript or nodejs 질문 드립니다.

김제연   
   조회 3727   추천 0    

초보 개발자 입니다. nodejs 로 프로그램을 하나 만들고 있는데 구글에서 어떻게 찾아야 할지 몰라 

질문 드립니다. 다름이 아니라 javascript 나 . nodejs 에는.. 배열을 뒤집어주는 reverse() 란 함수가 존재합니다.


a = [1,2,3]

a.reverse()

a= [3,2,1]

이런식으로요 ... 그런데 .. a란 값을 여러 함수에서 써야 하는데 A함수에서는 그대로 쓰고 B함수에서는 reverse한상태로 쓰고 

c함수에서는 그대로 쓰고 해야 하는데 reverse() 할때마다 원본 a의 값이 변경 되는게 문제입니다.. 

b함수에서 reverse 를 하고 사용뒤에 .. c함수에서 a를 호출하면 reverse 된 값이 넘어와서.. 혹시나 싶어서 .. 

b 함수에 b 변수를 만들어서 . let b = a 로 한뒤에 .. .b.reverse() 로 사용해보려고 했는데 b.reverse() 를 하면 원본 a의 값도 

reverse()가 됩니다. let b= a 를 하게되면 b=a 와 .. 연결이 되어있는거 같은데 ..어떻게 분리 하는줄을 모르겠습니다.. 

다른 언어 책 봤을때  ref 인지 뭔지 .. 같은 메모리 값을 가르키고 있어서 그렇다 정도로만 인식하고 있습니다.. 

A와 .. 완전 분리된 B를 얻을 수 있는 방법이 있을까요 ? 어떻게 하면 b.reverse() 했을때 a 가 변경 안되고 b로만 단독으로 

사용 가능 할지 질문 드립니다.. 초보라서 .. 글로 잘 설명이 힘드네요 .혹 이해하시는 분 계시면.. 설명좀 부탁 드립니다.


짧은글 일수록 신중하게.
원본을.파라메터로 받아 리버스하는 함수를 만들어 사용하세요
     
김제연 2018-02
파라미터로 받아도 ... 변경이 됩니다.
function test (a) {
    a.reverse()
}

var a = [1,2,3]

이렇게 하면... 원본의 [1,2,3]이  [3,2,1] 로 바뀝니다.

그래서 .. 제가 혹시나 해서 시도한 방법은 ..

function test (a) {
    let b = a
    b.reverse()
}

var a = [1,2,3]

이렇게 해도 .. 원본 a의 값이 [3,2,1] 로 변경 됩니다.
김제연 2018-02
function test (a) {
    console.log(a)
    let b = a
    b.reverse()
}

async function haha () {
    var a = [1,2,3]
    var b = await test(a)
    console.log(a)
}

haha()


결과값
[ 1, 2, 3 ]
[ 3, 2, 1 ]
김제연 2018-02
해결됀것 같습니다... 공부해보니 .. 얕은 복사와 깊은 복사가 있나봅니다.. 저런시긍로 하면 참조만 되어서 얕은 복사라고 하고 ...
깊은 복사를 사용해야 하는가 봅니다... 감사합니다.
     
얕은 복사와 깊은 복사문제가 아니라 전역변수 사용의 문제입니다.
지역변수 사용으로 인해 변수 scop에 의해 서로 다르게 인식하는 것입니다.
          
김제연 2018-02
서로 다르게 인식하는게 문제가 아닌... 지역변수를 사용했음에도 .. 전역변수의 값이 동일하게 변경되는게 문제였고
깊은 복사 문제여서 해결하였습니다.
Q: a란 값을 여러 함수에서 써야 하는데 A함수에서는 그대로 쓰고 B함수에서는 reverse한상태로 쓰고
c함수에서는 그대로 쓰고 해야 하는데 reverse()...

* 문법을 보니 ES6 로 보입니다.

var a = [1,2,3] ;

//배열 복사 :  변경 되지 않을 값을 복사한다.
var b= b.slice();

function funcA(b){
  //함수
//배열 b를 사용하는 로직 구성
}

function funcB(a){
  b.reverse()
}


위와 같이 하면 될 거 같내요...
* 전역 변수는 사용 할 때가 있기는 하지만 나중에 가면 독으로 변질되는 경향이 있습니다.
     
김제연 2018-02
네 답변 감사합니다... 전 초보라 b.slice()를 몰라서.. a = b 이런식으로 했던이 이 사단이 난거였습니다.. 답변 감사드립니다.


QnA
제목Page 4409/5703
2015-12   1654614   백메가
2014-05   5119195   정은준1
2019-07   3591   늘파란
2019-06   3591   시도니
2020-10   3591   전진
2017-09   3591   cclim
2015-03   3591   나몰라1
2017-09   3591   미노네
2018-07   3591   오이도슬레…
2014-03   3591   송진현
2018-01   3591   나라사랑
2018-07   3591   일반유저
2016-08   3591   박문형
2016-01   3590   푸하히
2017-05   3590   뚜뚜김대원
2018-09   3590   분당김동수
2015-09   3590   윈도우10
2015-05   3590   마스터고양이
2014-08   3590   테돌아이
2018-07   3590   BTclub
2014-12   3590   Korokoro
2014-07   3590   insert