Slight quibble: his JS example is a bit contrived. He gives the following:
js> a = 5;
5
js> f = function(x) { return x+a };
function (x){return x+a}
js> f(10)
15
js> a = 100
100
js> f(10)
110
Well, yes, this is true, but it's not a problem with JS' closures, it's a problem with its variable declaration. a is declared as a global variable by default. Yes, this is bad, and everyone knows it's bad, but it's a bit orthogonal to closures. It's very simple to solve this in JS: js> a = 5;
5
js> f = function (x) { var a = 5; return x + a };
function(x){var a;return x+a}
js> f(10)
15
js> a = 100
100
js> f(10)
15