Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function A()
{
/*условия*/
B();
}
function B()
{
/* условия */
A();
}
return eval("var $tail$function = function "+name+"("+args.join(",")+") {"+newBody+"};$tail$function");
можно обойтисьreturn Function(args.join(','),newBody)
var that = this;
return function () {
return Function(args.join(','), newBody).call(that);
}
var foo=21;
!function(){
var foo=42;
function fn1(){
console.log(foo)}
var src=fn1.toString();
var fn2=Function(src.substring(src.indexOf('{')+1,src.lastIndexOf('}')));
fn1();//=>42
fn2();//=>21
}()
С eval'ом примерно та же ситуация, но с другого бока — функция объявляется не в глобальном контексте, а в контексте замыкания Function.prototype.tail.
Эмуляция хвостовой рекурсии в JavaScript