여기 o1이라는 객체가 있다.
이 객체를 o2에 복사하면 메모리 할당은 어떻게 되는지 알아보자
var o1 = {name:'kim'}
var o2 = Object.assign({},o1)

객체의 내용은 같지만 다른 메모리를 할당하고 있다.
즉, o1 !== o2라고 할 수 있다.
그렇다면 o2의 내용을 바꾸어 보자이렇게 o2의 내용을 바꾸면 o2의 내용만 달라질뿐 원본인 o1의 내용은 보존될 수 있음을 알 수 있다.
배열은 다른 객체 요소(property)와는 다르게 저장된다.

위의 그림과 같이 배열의값은 다른 저장공간에 위치하고 객체는 배열의 위치값(reference)를 갖는다.
이 상황에서 o1객체를 복사해보자

Object.assign 명령어로 객체를 복사하면 배열의 위치값을 복사하므로 중첩이 일어난다.
즉, o2의 배열값을 바꾸게 되면 원본인 o1의 배열값도 바뀌게 된다.

이런일을 방지하고자 배열을 복사할때는 concat()명령어를 사용한다.

concat은 배열의 위치값(reference)를 복사하는 것이 아닌 배열값 자체를 복사하게 해준다.
그결과 o2의 배열값을 바꾸어도 원본인 o1의 값이 보존된다.