2014-09-25 5 views
0

다음 코드는 온라인에서 발견되었으며 리사이즈 이벤트 리스너와 함께 작동하도록 구현하려고하고 있으며 작동 방식이 복잡하다는 점을 이해하기 위해 고심하고 있습니다. JS/Jquery에 대한 3 개월의 경험이있는 사람이 이해할 수 있다고 말하면서 누군가 기꺼이 부 풀릴 수 있습니까? 내가 뭘 고민하고 있는지에 대한 몇 가지 지침은 (대부분은 그렇지만, 실제로 난처한 부분을 정의 할 것입니다.) "인수"또는 변수 "args"는 정의 된 값이 할당되었습니다. 어떻게 하나의 "즉각적인"디버깅 기능을 전달합니다.디 바운싱 세부 정보

function debounce(func, wait, immediate) { 
    var timeout; 

    return function() { 

     var context = this, 
      args = arguments; 


     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 

     var callNow = immediate && !timeout; 

     clearTimeout(timeout); 

     timeout = setTimeout(later, wait); 

     if (callNow) func.apply(context, args); 

    }; 
}; 

var debounceHeightSet = debounce(function() { 
    numHeightset(); 
}, 250); 

답변

1

인수는 자바 스크립트가 요청할 때만 만드는 배열이므로 사용자가 정의하지 않은 배열입니다. 또한 성능 문제와 보안 문제로 인해 javascript에서 인수를 사용하는 것이 좋습니다.

Args는이 코드에서 정의됩니다.

var context = this, 
    args = arguments; 

위의 문장은 쉼표로 여러 변수를 정의하는 방법입니다. 따라서 모든 변수에 대해 var 키워드가 필요하지 않습니다.

var callNow = immediate && !timeout; 

위의 사항은 "즉각"이 "부울"이어야한다는 확인입니다. 기능은 자바 스크립트의 첫 번째 클래스 객체가 따라

그래서 당신은

var debounceHeightSet = debounce(function() { 
    numHeightset(); 
}, 250,true); 

이 함수를 호출 할 수 있습니다, 함수의 다양한 사용은이 코드를 여기에 사용된다. 예 : 1) 'func'함수가 'debounce'함수의 인수로 수신됩니다. 2) 또한 "debounce"함수에서 함수가 반환됩니다.

참고 : 여기에 이름이 필요 없기 때문에 여기에 반환되는 함수는 익명의 함수입니다. "debounce"를 호출하는 사람은 임의의 변수를 저장할 수 있습니다.

+0

"즉치"부울 매개 변수에 대해 설명해 주셔서 감사합니다. 그래서 그것의 기본적인 이해는 나중에 함수 설정 "timeout = null;" "대기"기간 (debounce가 "debounceHeightSet"에 할당되고 setTimeout 코어 메소드로 전달 될 때 설정 됨) 동안 함수 호출이 무시된다는 의미입니다. 반면 부울 매개 변수가 "debounce (function() {...}, true)"로 전달되면 호출이 무시되지 않습니다. "func"가 "context"및 "arg"매개 변수를 사용하여 .apply() 메소드 체인을 가지고있을 때 무슨 일이 일어나는지 정확하게 설명해 주시겠습니까? – user3586963

+0

var callNow = 즉시 &&! 타임 아웃; debounce를 호출 할 때 대기 시간도 추가합니다. 그리고 타이머는 "wait"후에 실행될 코드에 생성됩니다. 그래서 코드는 타이머가 이미 존재하는지 여부를 확인합니다. 타이머가 이미 존재하면 호출은 이제 false가되고 func는 실행되지 않습니다. –

+0

이해를 돕기 위해이 링크를 체크하십시오. "http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply" –