2014-11-28 3 views
-3

클로저에있는 배열이 있고 그 클로저가 콜백으로 전달 된 경우 배열에 대한 변경 내용이 콜백에 표시됩니까?클로저를 사용하여 콜백에서 변수에 대한 변경 사항을 볼 수 있습니까?

예.

function ctor (func) { 
    this.func = func; 
} 

ctor.prototype.do = function() { 
    this.func(); 
} 

var arr = []; 

function doSomethingWithArr() { 
    for (var i = 0; i < arr.length; ++i) { 
    console.log(arr[i]); 
    } 
} 

var a = new ctor(doSomethingWithArr); 

a.do(); // should print nothing 

arr.push("Hello"); 
arr.push("World"); 

a.do(); 
// expect: 
// "Hello" 
// "World" 

내가 질문을 물었다 이유 때문에이 시도하고 심지어 내 타이핑 실수를 수정 한 후 작동하지 후 : console.log(i) ->console.log(arr[i])을, 비슷한 질문을 여기에 검색 나는 아무것도 찾을 수 없습니다.

답변

0

콜백에 표시되는 배열이 변경됩니까?

예, 클로저, 그것은 (배열의 경우에는 여전히 어쨌든 객체 참조 할 것) 값의 복사본을 생성하지 않는 폐쇄 위에 변수에 참조을 유지한다.

+0

감사합니다. 나는 뭔가 잘못된 것이 있다고 생각합니다. 위의 예는 나를 위해 작동하지 않는 것 같습니다. – Hector

+0

@Hector : 흠,'arr [i]'로 편집 했으므로 그대로 코드를 콘솔에 복사 할 때 예상되는 내용을 정확하게 기록합니다 – Bergi

관련 문제