0
왜이 경고하지 않는가, b, c?왜 concat 메서드가 내 배열 참조를 망쳐 놓는 것처럼 보입니까
var results=[];
function test(r){
var abc = ['a','b','c'];
r=r.concat(abc);
}
test(results);
alert(results);
왜이 경고하지 않는가, b, c?왜 concat 메서드가 내 배열 참조를 망쳐 놓는 것처럼 보입니까
var results=[];
function test(r){
var abc = ['a','b','c'];
r=r.concat(abc);
}
test(results);
alert(results);
왜냐하면 concat이 호출하는 객체를 수정하지 않기 때문입니다. 또한 r=r.concat(abc);
은 전달을 이해할 수 없음을 나타냅니다. r을 무언가에 할당 할 때, 값으로 전달 된 원본이 무엇을 가리키고 있는지를 변경하지 않고, 함수에서 변수가 가리키는 것을 업데이트하는 것뿐입니다. 이것은 작동합니다 :
var results=[];
function test(r){
var abc = ['a','b','c'];
return r.concat(abc);
}
results = test(results);
alert(results);
배열을 연결 한 후에 무엇을하고 싶습니까? 즉, 값을 반환하지 않고 원본을 업데이트하려면 어떻게해야합니까? 그리고 설명에 감사 드리며 지금은 이해가됩니다. 나는 어느 정도 언급에 의해 지나가는 것을 이해하지만, 분명히 그렇게해야한다. – qw3n
정말로 원한다면,'r.push.push.apply (r, abc)'는'r'에 의해 참조 된 객체를 in-place로 변경할 것입니다. 그러나 그것은 다소 추한 것입니다. – ephemient
@ qw3n gald 나는 도울 수 있었다. 이렇게하려면 전달 된 변수를 수정하는 함수를 사용해야합니다. 체크 아웃'push()'와'splice()'. – Melv