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