2012-04-04 7 views
2

나는 다음을 수행하려고 :자바 스크립트를 익명 함수()

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    alert(response); 
}); 

응답 undefined이다, 나는 그것이 "hello" 될 것으로 기대한다. 어떤 아이디어?

+0

"print response"를 작성했지만 자바 스크립트에는 인쇄물이 없습니다. – mpm

답변

4

call 첫 번째 인수는 "this"에 대한 참조 여야합니다. "this"는 당신이 당신의 기능을 수행하기를 원하는 상황입니다. Call function Mozila MDN

+0

그 대답은 고마워요. – Justin

+1

.call 부분을 생략하고 this.callback ("hello")이라고 말할 수 있습니다. 그리고 모든 바인딩 요소를 생략하고 콜백 매개 변수를 직접 콜백 ("hello")으로 사용할 수 있습니다. – nnnnnn

1

당신이 쓴 :

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    print response; 
}); 

인쇄 나던 자바 스크립트에 존재합니다.

는 당신이

callback.call(this,"hello") , 

그냥 통화 기능 서명을 확인 작성해야

잘못이다 this.callback.call을 썼다.

+0

bind()와 콜백을 포함하는 객체를 바인드하기 때문에 실제로'this'가 필요합니다. ajax 이벤트에서 콜백이 시작될 때까지 매개 변수'callback '에 전달 된 값이 범위를 벗어날 것이므로 bind()를 사용해야합니다. – Justin

+0

@Justin - ajax 콜백이 실행될 때 main() 함수의 콜백 매개 변수에 계속 액세스 할 수 있습니다. main()은 then_로 끝나지 만 closure의 마술로 인해 종료됩니다. 그것을 시도하고 볼 ... – nnnnnn