I been getting into javascript patterns and would love to get some feedback. I notice that I got some general helper functions. Is this a good approach of dealing with it?// carousel.jsvar Carousel = (function() {  var timeout = 340;  function init() {    applyForTheseQueries();    $(window).on('resize', Helpers.debounce(function() {      applyForTheseQueries();    }, timeout));  }  function applyForTheseQueries() {    var $carousel = $('.js-slick');    var query = $carousel.data('query');    var mediaQuery = Helpers.executeFunctionByName(query, window);    if (mediaQuery && !$carousel.hasClass('init-done')) {      $carousel.addClass('init-done').slick();    } else if (!mediaQuery && $carousel.hasClass('init-done')) {      $carousel.removeClass('init-done').slick('unslick');    }  }  return {    init: init  };})();$(function() {  Carousel.init();});// helpers.jsvar Helpers = (function() {  function executeFunctionByName(functionName, context) {    var args = [].slice.call(arguments).splice(2);    var namespaces = functionName.split(.);    var func = namespaces.pop();    for (var i = 0; i < namespaces.length; i++) {      context = context[namespaces[i]];    }    return context[func].apply(context, args);  }  function debounce(func, wait, immediate) {    var timeout;    return function() {      var context = this;      var 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);    };  };  return {    executeFunctionByName: executeFunctionByName,    debounce: debounce  };})();
Module with helper functions to initialize or reinitialize a Slick carousel
javascript;revealing module pattern