콜백 메서드에 함수 범위를 전달하려고합니다. 내가 겪고있는 문제는 개체 범위를 가져 오는 것이고, 원래 함수에서 매개 변수와 로컬 변수에 대한 액세스를 제공하지 않는다는 것입니다. "this"에 대한 나의 이해는 외에도 과 현재 컨텍스트 (창 또는 일부 오브젝트)를 의미합니다. [리차드 콘 포드 (Richard Cornford)의 우수 사례 "실행 컨텍스트"섹션에서 http://jibbering.com/faq/notes/closures/을 인용하십시오. 나는 또한 자바 스크립트의 변수가 함수 범위를 가지고 있다는 것을 이해한다. (함수 안에서 선언 된 경우, 함수 내에서만 접근 할 수있다.)범위를 콜백 함수/바인딩에 전달
새로운 환경에서 나는 이전 고용주에게 많이했던 패턴을 비동기식 메서드 호출, 콜백 처리기 지정 및 현재 범위 통과, 사용 가능 상태로 만들기 위해 코드를 작성하려고합니다. 콜백 메소드에서. 현재 환경에서이 사실을 발견하지 못했습니다. (공개 : 내가 이전 환경에서 ExtJS를 사용하고 있었는데 ... 내가 프레임 워크를 사용하여 너무 아늑한 것처럼 느껴지 게하여 무슨 일이 일어 났는지에 대한 가정을 만들어 냈습니다.)
간단한 테스트 코드는 내가 무엇을하려고 노력하는지, 어떤 것이 작동하지 않는지를 보여줍니다.
function myHandler(data, ctx) {
console.log('myHandler(): bar: ' + bar); // <- prob: bar undefined
console.log(JSON.stringify(data));
}
MySvcWrap = {
doWork: function(p1, callback, scope) {
var result = {colors: ['red', 'green'], name:'Jones', what: p1};
if (callback) {
callback.call(scope||this,result, scope);
}
}
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, this); // scope object is this
}
lookup();
여기서 문제는 MySvcWrap.doWork에 전달 된 'this'가이 경우 전역 개체라는 점입니다. 제 의도는 함수의 실행 컨텍스트를 myHandler에 전달하는 것입니다.
나는 무엇을 시도했다. '이'나는 작동하는 물체, 예를 통과 대신하는 경우 :
function myHandler(data, ctx) {
console.log('myHandler(): this.bar: ' + this.bar); // <- no prob: this.bar
console.log(JSON.stringify(data));
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, {bar: bar}); // scope object is just object
}
나는 여기에 머리 클럽 날에 사람이 필요합니다 ... '이'내 첫 번째 경우에, 물론 통과 할 때 이것은 전역 적 범위입니다. (전역 적으로 정의 된 함수입니다) ... 제 문제는 범위를 전달할 때 해당 컨텍스트에서 로컬로 정의 된 변수와 매개 변수에 액세스 할 때 생각한 것입니다 ... 이전에 이해 한 것을 흔들고 있습니까? JS? 이 작업을 수행하는 방법은 무엇입니까?
...
this
확신은 데모 용으로window
아니다 만드는 것을 범위를 볼 수 있습니다 핸들러 접근법. –