문제

이것은 일종의 임의의 질문이지만, 익명의 기능에 비해 클릭 이벤트를 위해 이름이 지정된 콜백이 왜 더 나빠지는지 궁금했습니다.

여기에 대한 링크가 있습니다 jsperf Mac에서 Firefox 및 Chrome에서 실행 한 테스트.

내 가정은 이름이 지정된 콜백이 항상 더 잘 수행 될 것이라고 생각합니다. 예를 들어, 사용할 때 .each 이름이 지정된 콜백 약간 더 빠릅니다.

시간 내 줘서 고마워!

편집하다 나는 편집했다 .each jsperf 테스트 (a) 나는 내가 의미하는 것을 테스트하지 않았고 (b) 나는 견딜 수 없는 이벤트를 더 모방하기 위해.

편집 2 @esailija가 아래에 지적한 것처럼 테스트 설정이 처음부터 잘못되었습니다. 이 질문은 다소 무의미하지만 적어도 JSPERF 테스트를하는 사람에게 도움이 될 수 있습니다.

도움이 되었습니까?

해결책

테스트 경계에 걸쳐 이벤트 핸들러를 축적하여 JSPERF가 고장났습니다. 다른 Wrods에서는 먼저 실행되는 테스트가 "가장 빠른"것입니다.

그리고 시험의 전체 전제는 말도 안되며, 이름이있는 함수와 다른 모든 것이 동일하다면 이름이없는 함수 사이에는 차이가 없습니다. JSPERF를 잘못 설정할 때만 차이가 표시됩니다. 끊임없이 동등한 결과를 얻을 때 당신은 당신이 그것을 올바르게 설정했다는 것을 알고 있습니다. 그러나 당신은 이미 상식에서 이것을 알고있을 것입니다 :)

다른 팁

익명 함수는 인수로 전달되므로 참조를 해결하기 위해 스코프 체인이 그것을 만든 부모 함수로 완전히 도달하지는 않습니다. 인수로만 존재합니다. 반면에, 명명 된 함수에 대한 참조를 해결하기 위해, 스코프 체인은 지정된 함수가 생성 된 부모 함수 폐쇄로 되돌아갑니다.

편집하다:나는 이것을 증명하려고 노력했지만 익명의 함수가 실제로 더 빨리 해결되지 않는 것처럼 보입니다. http://jsperf.com/scope-chain-anonymous-function

편집하다: 전화하면 a.off(); 모든 이벤트 처리기를 제거하려면 이름이 지정된 기능이 익명 기능을 해결하는 것보다 빠르거나 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top