2011-12-20 2 views
2

node.js에서 실행 중입니다. 다음 코드 세그먼트가 cb var의 범위를 잃는 이유는 무엇입니까?이 javascript 함수가 클로저 범위를 잃는 이유는 무엇입니까?

Client.prototype.post = function(path, data, callback) { 
    var self = this; 
    var cb = callback; 
    return function() { 
    console.log(path); 
    console.log(cb); 
    rest.post(self.baseUrl + path, data).on('complete', cb || this.callback); 
    } 
}; 

이 함수의 호출이 client.post('/user', {}, function() {}); 모양 및 출력 다음 내가 반환 함수는 아마도 하나의 js의 .call() 이상에서 실행중인 [Function]로 두 번째 줄을 기대하고 있습니다

/user 
undefined 

.apply()에서 실행되는 범위를 변경하는 방법이 있습니다. 그러나 과 마찬가지로 cb에 액세스 할 수 있다고 생각합니다.

업데이트 : 함수에서 콜백을 래핑하면 제대로 작동합니다. 그러나 나는 아직도 여기서 일어나는 일에 대한 설명을 원합니다.

var cb = function() { callback(); }; 
+2

'call' /'apply'는 범위가 아닌 컨텍스트를 변경합니다. 무슨 일이 일어나고 있는지 말하는 것은 일어나지 않아야합니다. 실제 코드에 연결할 수 있습니까? – david

+1

저를 위해 일하십시오 : http://jsfiddle.net/Squeegy/Uf9nD/ 아마 당신의 문제는 다른 곳에서 거짓말을합니다 ... –

+0

https://gist.github.com/1503056 lines 33-41. 이 파일은 vowsjs –

답변

2

예상대로 작동합니다. 모든 의견이 옳다는 것은 잘못된 질문입니다. 누군가는 코드 작성법을 배워야합니다.

관련 문제