substitutes for arguments and arguments.callee in ECMAScript 5

Brendan Eich brendan at
Thu Jan 6 08:32:02 PST 2011

On Jan 6, 2011, at 12:17 AM, Garrett Smith wrote:

> On 1/5/11, Allen Wirfs-Brock <allen at> wrote:
> [...]
>> the function expression form has a well-defined meaning anywhere including
>> in the compound statement blocks such as if-statements.  The meaning of the
>> latter two declaration forms are not defined by the standard when they occur
>> within compound statement blocks.  What they do, depends upon the browser.
> [...]
> ES5 note uses some terminology that I don't understand.

I missed the "issue a warning" there at the bottom of 12, but there's also one in 14.1.

> "disallow usage"? "issue a warning"? What do those mean? It'd make
> sense to say "throw a SyntaxError". What does it mean to issue a
> warning? When does it happen? After the misplaced FD early (as early
> errors)? Or do warnings cause for abrupt completion?
> I'd prefer "An implementation that handles FD as a Statement must
> issue a warning" but I think "issue a warning" should be defined.

We are going to ban function declarations in blocks in strict mode, in Firefox 4. We have warning facilitiies too but they can generate a ton of noise without extra latch logic to suppress all but the first and avoid a console-spam storm. We're not going to warn about functions in blocks.

A recent function-in-block case we found involved an expectation of hoisting, either to block top (as proposed for Harmony, where the function binding would be block-local) or top of enclosing function or program (as IE and followers do). We evangelized the site successfully to reorder things. FYI, and a hopeful sign.


More information about the es-discuss mailing list