2014-09-25 2 views
0

Я нашел следующий код в Интернете, и я пытаюсь реализовать его для работы с прослушивателем событий изменения размера и изо всех сил пытаюсь понять тонкости его работы. Кто-нибудь захочет разбить его на говорящий, что кто-то, у которого есть только 3-месячный опыт JS/Jquery, поймет? Несколько указаний относительно того, с чем я борюсь (что больше всего, но я определяю действительно запутанные части), где «аргументы» или переменная «args», что это значение было присвоено определенному? Как пройти «немедленную» функцию дебюта. и т. д. и т. д.Debouncing Breakdown

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 делает только тогда, когда его запрашивают, чтобы вы этого не определяли. Также не очень хорошая практика использования аргументов в javascript из-за проблем с производительностью, а также проблем безопасности.

В этом коде Args определен.

var context = this, 
    args = arguments; 

Вышеупомянутый оператор - это определение нескольких переменных с использованием запятой. Таким образом, вам не нужно ключевое слово var для всех переменных.

var callNow = immediate && !timeout; 

Выше является проверка, поэтому «немедленная» должна быть «логической».

Таким образом, вы можете вызвать эту функцию

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

В функции объекты первого класса в JavaScript, разнообразное использование функций здесь используются в этом коде. Пример: 1) Функция «func» принимается как аргумент функции «debounce». 2) Также функция возвращается из функции «debounce».

Примечание. Функция, возвращаемая здесь, является анонимной функцией, потому что здесь нам не нужно имя. Тот, кто вызывает «debounce», может хранить в нем любую переменную.

+0

Спасибо за разъяснение относительно «немедленного» логического параметра. Итак, мое основное понимание этого заключается в том, что внутри более поздней функции устанавливается параметр «timeout = null;» означает, что любые вызовы функций во время «ожидания» (устанавливается, когда debounce назначается «debounceHeightSet» и передается методу coreTimeout) игнорируются. Если логический параметр передается в "debounce (function() {...}, true)" вызовы не игнорируются? Не могли бы вы объяснить, что именно происходит, когда функция func имеет цепочку методов .apply() с параметрами «context» и «arg»? – user3586963

+0

var callNow = немедленный &&! Timeout; Когда вы вызываете debounce, вы также добавляете время ожидания. И таймер создается в коде, который будет выполняться после «ожидания». Таким образом, код проверяет, присутствует ли таймер или нет. Если таймер уже присутствует, тогда вызов становится ложным, и func не будет выполнен. –

+0

Оформить эту ссылку, чтобы понять, примените "http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply" –

Смежные вопросы