?> There's a little more to it.
IE<9 actually creates 2 function objects when parsing NFE; not just leaks identifier to the enclosing scope. It might seem irrelevant at first, but if you consider that something like `var f = function g(){ ... } ` will result in creation of 2 distinct function objects bound to `f` and `g`, it's easy to imagine how this could lead to all kinds of lovely bugs (e.g. when assigning to a property of function object; and having that property on `f` but not `g`, or vice versa).


In addition, the leakage of that extra identifier is a memory leak in IE <= 8. If you create a lot of those NFE's like that, you'll leak a noticeable amount of memory in IE.

John David-Dalton suggested this pattern (I believe) which clears up the memory leakage:

var abc = function def() { ... };
...
// later, to make sure the memory is fully cleaned up:
abc = def = null;

But the fact that this was an issue all the way up through IE8 points out that NFE's are not a complete cure-all for losing arguments.callee, because they come with some unfortunate baggage in IE.


--Kyle
--
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/[email protected]/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/[email protected]/

To unsubscribe from this group, send email to
[email protected]

Reply via email to