2016-08-25 2 views
0

다음 코드에서 2 차원 배열이 생성되고 0으로 미리 채워질 것으로 예상됩니다. 내가 겪고있는 문제는 x[0][3] = 2이 너무 빨리 일어나고있는 것 같아서, 콘솔 로그가 함수 안에있을 때 배열은 이미 변경된 값을 가지고있다. 타임 아웃이 있어도이를 해결할 수 없습니다. 무슨 일이야?이 2 차원 어레이가 예기치 않은 결과를 만드는 이유는 무엇입니까?

function test(size) { 
    var row = []; 
    var return_me = []; 
    for (var i=0; i < size; i++) { row.push(0); } 
    for (var j=0; j < size; j++) { return_me.push(row.slice()); } 
    console.log("1:"); 
    console.log(return_me); 
    return return_me; 
} 

var x = null; 
console.log("0:"); 
console.log(x); 
x = test(5); 
console.log("2:"); 
console.log(x); 
x[0][3] = 2; 
console.log("3:"); 
console.log(x); 

예상치 못한 결과가 온다 "1 :"내가 얻을 출력에 : 배열 객체이기 때문에

0: 0 
1: 0 
2: 0 
3: 2 
4: 0 
+1

실제 _error_가 있습니까? 아니면 예기치 않게 보이는 로그입니까? – Xufox

+0

예상치 못한 로그 결과는 무엇입니까? –

+0

죄송합니다. 오해의 소지가 있습니다. 오류는 없습니다. 좀 더 명확하게 질문을 업데이트하고 있습니다. –

답변

2

, 당신이의 실제 (최신) 값으로 표시됩니다 console.log()은 개체에 대한 참조를 보여 주며이 개체를 열 때까지 값이 변경되었습니다.

console.dir()은 크롬에서 작동하지 않지만 console.dir()을 사용하여 개체의 현재 상태를 인쇄하는 옵션입니다.

크롬에서 실제 가치를 얻으려면 전체 값이 아닌 하나의 값을 인쇄하십시오.
this post에서 자세한 설명과 추가 정보를 볼 수 있습니다.

+0

나는 그것이 (내 기능 자체가 아닌) 그런 것 같았 으면 좋겠다. 감사! –

+0

예, 저는 JS를 코딩하는 모든 사람들이 조만간이 문제에 걸림돌이 될 것이라고 생각합니다. :디 –

관련 문제