2013-02-10 3 views
1

중첩 함수에 대한 질문이 있습니다. 내가 이벤트를 생성하는 기능을 가지고 말한다면js, 중첩 처리기, 성능

http://net.tutsplus.com/tutorials/javascript-ajax/stop-nesting-functions-but-not-all-of-them/

나는 아래를 참조

, 내 질문은, 그리고 나는 create_event 기능의 내부 핸들러를 중첩.

function create_event(){ 
    el.click(handler); 

    function handler(){ 

    } 
} 

이 처리기는 그가 말한 중첩 된 기능이 될 수 있으며 성능에 영향을 줍니까?

또는

은 핸들러의 값은 handler() 링크 create_event()를 호출하지 않습니다를 클릭하는 객체에 저장됩니다인가? 그래서 이런 종류의 중첩 된 함수는 좋은 패턴입니까 ??

대단히 감사합니다.

답변

2

제레미가 말하는 것은 당신의 경우와 조금 다릅니다. 문서에서 인용하기

많은 개발자들은 함수가 JavaScript의 값이라는 것을 잊어 버립니다. 코드에서 함수를 선언하면 JavaScript 엔진이 해당 함수 객체 (변수에 할당되거나 다른 함수로 전달 될 수있는 값)를 만듭니다.

귀하의 경우, 다른 요소를 클릭하면 처리기의 값이 할당되므로 요소를 클릭하면 원래 create_event의 컨텍스트에서 직접 핸들러 함수가 호출됩니다. 다음 코드를 가정합니다.

function create_event(el, randomValue){ 
    el.click(handler); 

    function handler(){ 
     alert(randomValue); 
    } 
} 

create_event(document.getElementById('sample'), 5000); 
create_event(document.getElementById('sample1'), 'abc'); 

샘플을 클릭 할 때 경고가 발생하며 5000을 클릭하면 경고 메시지가 나타납니다. 처리기 함수가 정의 된 컨텍스트가 처리기의 해당 인스턴스와 항상 연관되는 방법에 유의하십시오.

Jeremy가 지적했듯이 create_event을 호출 할 때마다 hander 함수가 정의되지만 create 이벤트를 제한된 횟수만큼 호출하기 때문에 성능 효과가 최소화됩니다.

+0

대단히 감사합니다. – Till

+0

을 클릭하면 엔진이 create_event 함수를 생성하지 않고 컨텍스트에서 핸들러 함수 만 생성합니다. 이 올바른지? – Till

+0

사실 create_event를 호출 할 때 핸들러는/element 하나만 생성됩니다. 이 시점에서 요소의 클릭 동작에 바인딩되면 참조가 저장됩니다. 클릭시이 참조는 핸들러 함수를 호출하는 데 사용됩니다. – Birla