On Thu, 10 Feb 2011 21:02:43 -0000, Tab Atkins Jr. <[email protected]> wrote:

Nope, execution is the culprit here, as function declarations are
actually executed code.  Saying "function foo() { bar(); }" is the
same as saying "window.foo = function(){ bar(); };" (module a few
irrelevant details).  The act of defining functions requires executing
functions (hidden behind the syntax of an operator, but still).

Solving this does require deferring execution entirely, like the GMail
Mobile team was able to do with the comment hack.

Are you sure about this? As far as I understand it, execution of:

window.foo = function(){ /* nothing */ }

and

window.foo = function(){ crazy(); amount(); of(); code(); }

is basically the same — just linking of function expression to global scope (so that referenced globals can be found *later* when function body is executed) and assignment of Function object to window.foo.

So once script is parsed, I assume that definition of a huge function should not be any slower than definition of an empty function.

--
regards, Kornel

Reply via email to