function findSequence(goal) {
var find = function (start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
var sequence = findSequence(24);
sequence
是封闭函数吗?如果是的话,以这种方式使用闭包是否更可取?我通过网络资源教我避免关闭。
更新
我在评论中被要求显示网络资源。这些是我在网上看到的更可靠的资源。
“绩效考虑”下的2.“{垃圾收集 - 关闭”下的Addy Osmani's Article。
3. MSDN - 请参阅“闭包”部分。
4. Stack Overflow Post - 见接受的答案。
6。another intresting article - 见最后两段。
答案 0 :(得分:2)
不,sequence
根本不起作用;所以它不是closure。
find
函数是一个闭包。它以递归方式调用并维护对父作用域中goal
变量的引用。但它并没有超过findSequence
电话,所以我们不使用此功能。在这里使用额外的递归函数是非常好的。
我被教导要避免关闭。
没必要。也许他们需要更多的记忆,但不关心这一点。如果它们派上用场(通常由于它们的功能而发生)并且您发现它们很有用,那么使用它们。不要做premature optimisation。只有当您遇到实际的性能问题时,您才可以考虑解决它们。
答案 1 :(得分:1)
序列是闭包函数吗?
没有。它只是在范围内进行递归。
答案 2 :(得分:0)
sequence
是一个变量,它从findSequence(24);
答案 3 :(得分:0)
不,不是。您只是在函数中递归并返回结果。当你做这样的事情时会创建闭包。
function getFun(param){
var x = 5;
return function(){
return param * x; // Here closure is created, variables param and x are retained.
}
}
var foo = getFun(5);
alert(foo()); // alerts 25