> With "var bar = function() { ... };", I bet you run into self-recursion issues. Unless I'm mistaken, the variable "bar" isn't in the scope of the closure.
At the very least, (def bar ...) and (def foo ...) won't be corecursive, since foo isn't in bar's scope.
Actually, both of these cases are working fine for me with the ``var bar = function() {...};`` format. This is testing in Chrome 5 on Linux:
// recursion
var foo = function(x) {
if (x == 0)
return "done";
else
return foo(x - 1);
};
foo(5)
// => "done"
// corecursion
var foo = function(x) {
if (x == 0)
return "done";
else
return bar(x - 1);
};
var bar = function(x) {
if (x == 0)
return "done";
else
return foo(x - 1);
};
foo(5)
// => "done"
bar(5)
// => "done"
Actually, you're right. ^^; In JavaScript, all variables declared in a function are visible throughout the function, even before the declaration statement.
var foo = 4;
(function(){
alert( foo ); // "undefined"
var foo = 2;
})();