2012-04-16 1 views
1

을 콜백, 다시 그것을 제거 할 그래서 같은 익명 함수 :

callbacks.add(function(){ console.log('Hello anonymous world') }); 
callbacks.fire(); // logs 'Hello anonymous world' 

잘 보이는, 하지만 난 더 이상 기능을 제거 할 수 없습니다 :

callbacks.remove(function(){ console.log('Hello anonymous world') }); 
callbacks.remove(); 

callbacks.fire(); // still logs 'Hello anonymous world' 

이를 극복 할 방법이 있습니까? OP의 요청에 따라

+0

함수는 포인터로 식별됩니다. 익명 함수에 대한 포인터가 없으므로 제거 할 함수를 알리기 위해'remove()'에 전달할 것이 없습니다. 중복이 다른 포인터를 가지고 있기 때문에 단순히 중복 함수를 전달하는 것은 그것을 수행하지 않습니다. 함수에 변수를 할당 한 다음 그 변수를'remove()'에 전달해야합니다. –

+0

아마도 익명 함수를 감지하고 변수를 할당하는 방법이있을 것입니다. 그런 다음 익명의 다른 익명을 삭제할 때 동일한 익명인지 확인하십시오. – Kriem

+0

아니요. 포인터가 다르므로 절대로 같지 않습니다. –

답변

3

:

기능은 포인터로 식별됩니다. 익명 함수에 대한 포인터가 없으므로 제거 할 함수를 알리기 위해 remove()에 전달할 것이 없습니다. 중복이 다른 포인터를 가지고 있기 때문에 단순히 중복 함수를 전달하는 것은 그것을 수행하지 않습니다. 함수에 변수를 할당 한 다음 해당 변수를 remove()에 전달해야합니다.

참조 : http://api.jquery.com/category/callbacks-object/

0

당신은 함수 자체 내에서 그것을 제거 할 수 있습니다 (같은 함수의 마지막 줄에서) arguments.callee를 엄격한 '에서는 유효하지 않습니다하지만 arguments.callee를 (자신에 대한 참조)를 사용하여 방법'.

관련 문제