Нужно детально понять простой код?
$('#ddmenu li').hover( // обрабатываем событие :hover
  // В this у нас будет элемент li

  // Начинайте читать со второй функции, будет понятнее

  // функия выполнится при наведении мыши
  function () {
    // Достать из data-атрибута* ссылку на таймер и очистить его
    // Таким образом, если мы увели мышку с элемента, и тут же 
    // сразу навели обратно, не будет моргания выпадашки
    clearTimeout($.data(this,'timer'));
    // Выбираем ul внутри наведенного li
    // Останавливаем анимации, если они не успели закончится
    // И начинаем новую анимацию slideDown (показываем выпадашку)
    $('ul',this).stop(true,true).slideDown(200);
  },

  // функия выполнится при уходе мыши
  function () {
    // В this (элемент li) в data-атрибут* под именем timer запишем 
    // результат функции setTimeout (ссылка на таймер)
    $.data(this,'timer', setTimeout(
      // Proxy "протаскивает" контекст this внутрь функции
      $.proxy(
        function() { // Функция, внутрь которой пробросится контекст
            // Благодаря прокси здесь this по-прежнему указывает на li
            // Получается мы выбираем ul внутри наведенного li
            // Останавливаем анимации, если они не успели закончится
            // И начинаем новую анимацию slideUp (скрываем выпадашку, видимо)
            $('ul',this).stop(true,true).slideUp(200);
        },
        this // пробрасываемый контекст - наведенный элемент
      ),
      100 // таймаут, через 0.1 сек после ухода мыши выполнится функция закрытия
    ));
  }

);
* Не совсем верно. Данные пишутся не в data-атрибут. jQuery использует собственное хранилище данных. но сути это особо не меняет, а для понимания легче.
Для того, чтобы понять что тут написано не обязательно задавать вопрос, достаточно погуглить конструкцию $.data(): https://api.jquery.com/jquery.data/ и clearTimeout(): javascript.ru/cleartimeout