return when desugaring to closures
Peter Michaux
petermichaux at gmail.com
Sat Oct 11 10:20:38 PDT 2008
On Sat, Oct 11, 2008 at 10:02 AM, Mark S. Miller <erights at google.com> wrote:
> On Sat, Oct 11, 2008 at 9:11 AM, Peter Michaux <petermichaux at gmail.com> wrote:
>> As it stands, I always write the following in ES3
>>
>> var f = function() {};
>>
>> and now that arguments.callee is on the chopping block, I've started
>> writing recursion as the painful contortion below
>>
>> var f = (function() {
>> var callee = function() { callee(); };
>> return callee;
>> })();
>
> I don't get it. Why not write
>
> var f = function() { f(); };
var f = function() {f();};
var g = f;
f = function(){alert('broke your recursion :)');};
g();
The call to g will not create an infinite loop which is the intended
behavior of the function object defined in the first line. The late
binding of the recursive call to whatever f happens to reference is
the problem.
Peter
More information about the Es-discuss
mailing list