var foo = foo || [1, 2, 3];
>
> fehlerfrei in JSLint: "Global foo"
Hingegen:
(function () {
var foo = foo || [1, 2, 3];
alert(foo);
}());
Error:
Problem at line 2 character 11: Unexpected 'foo'.
Gut, das Pattern ist auch vor allem global sinnvoll, denn nur da kann es dazu kommen, dass Scriptreihenfolge unterschiedlich ist. Der Async-Code von Google Analytics verwendet das beispielsweise. Denkbar wäre aber auch ein lokaler eval(), bei dem man dem eval-Code Variablen zur Verfügung stellen will.
Mathias