`context` is desired scope for callback when it will be called later. It may be undefined.
`ctx` is the scope which will be used for that call. It will be equal to `context` or `shower`.
We need to keep original `context` value to unsubscribe properly.

```js
var appleContext = {a: 1};
var bananaContext = {b: 2};
shower.on('go:before', handler);
shower.on('go:before', handler, appleContext);
shower.on('go:before', handler, bananaContext);
// we have 3 listeners here
shower.off('go:before', handler, appleContext);
// we have 2 listeners here (with shower and bananaContext)
shower.off('go:before', handler);
// we have no listeners
```

> In shower-events.js:
> 
> > + */
> > +(function (s) {
> > +
> > +	var storage = {};
> > +
> > +	/**
> > +	 * Subscribe to an event.
> > +	 *
> > +	 * @param {String} name of the event. Passing "all" will bind the callback to all events fired.
> > +	 * @param {Function} callback to run when specified event will trigger
> > +	 * @param {Object} [context] for callback
> > +	 * @returns {Object} execution context
> > +	 */
> > +	s.on = function(name, callback, context) {
> > +		var events = storage[name] || (storage[name] = []);
> > +		events.push({callback: callback, context: context, ctx: context || this});
> context and ctx? I don't understand...
> 
> —
> Reply to this email directly or view it on GitHub.
>