I took this code from Leaflet api.
no idea what args and arguments is doing in return fn.apply(obj, args || arguments);
bind: function (fn, obj) { // (Function, Object) -> Function var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null; return function () { return fn.apply(obj, args || arguments); }; },