They mentioned memory leaks as their reasoning. Run the following program in any browser and you will see the memory usage balloon out of control:
var theThing = null;
function replaceThing(){
var oldThing = theThing;
function unused(){ return oldThing }
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function(){ }
};
}
setInterval(replaceThing, 1000);
V8 (and all other engines I tested) will save the oldThing variable in someMethod's lexical environment record, causing each Thing to keep a reference to the previous Thing, preventing it from being garbage collected. This is despite the fact that the old thing is actually unreachable - someMethod never uses the oldThing variable.
I interpret 'Avoid closures' as just don't define a function within your function. Private functions are simply functions that haven't been exported and aren't really closures (if we're talking about using a module pattern, at least).
Excessive closures can lead to memory leaks. Anonymous closures are a PITA when debugging.
First I've heard the word used in this context, but I assume it refers to the appearance of the braces forming a 'V' pattern of what look like seagulls.
Deeply nested closures are harder to inline and optimize. If you want fast code then the easiest way to accomplish that is with explicitly spelling out everything in the prototype instead of generating closures.