在Javascript中,我有时想从一个不是当前函数的作用域返回一个值.它可能是函数中的一个代码块,或者它可能是一个封闭函数,如下例所示,它使用本地函数递归搜索某些东西.一旦找到解决方案,搜索就完成了,外部函数应该退出.不幸的是,我想不出更简单的方法来做到这一点,而不是通过黑客攻击try/catch为目的:
function solve(searchSpace) {
var search = function (stuff) {
var solution = isItSolved(stuff);
if (solution) {
throw solution;
} else {
search(narrowThisWay(stuff));
search(narrowThatWay(stuff));
};
};
try {
return search(searchSpace);
} catch (solution) {
return solution;
};
};
Run Code Online (Sandbox Code Playgroud)
我意识到可以将解决方案分配给局部变量,然后在进行另一次递归调用之前检查它,但我的问题是关于控制权的转移.有比上面更好的方法吗?也许涉及标签/休息?
编辑:因为日期的答案是"你不应该那样做的坏",让我添加一些必要的背景.我正在攻击一个针对Javascript的开源编译器.没有人会手动编写这段代码,所以请不要告诉我"这是一种糟糕的编程技巧".我想要的是更好的代码生成技术.问题是,是否有人有任何聪明的黑客利用Javascript来获得更灵活的控制转移.
将结果分配给局部变量并检查它的原因是因为这需要以编译器难以理解的方式理解代码.
javascript ×1