Javascript:是这个闭包函数
Javascript : Is this closure function
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
是闭包功能吗?如果是,以这种方式使用闭包是否更可取?网络资源教我避免关闭。
更新:
我在评论中被要求显示网络资源。这些是我在网络上看到的更可靠的资源。
1.MDN - "性能注意事项"下的关闭。
2.Addy Osmani在"垃圾收集 - 关闭"下的文章。
3.MSDN - 请参阅"关闭"部分。
4.堆栈溢出帖子 - 请参阅接受的答案。
5.堆栈溢出柱
6.另一篇引人入胜的文章 - 见最后两段。
不,sequence
根本不是函数;所以它不是闭包。
find
函数是一个闭包。它被递归调用,并维护对父作用域中goal
变量的引用。然而,它不会超过findSequence
调用,因此我们不利用此功能。在这里,递归的额外函数的使用非常好。
我被教导要避免关闭。
没这个必要。也许他们需要更多的内存,但不在乎这些。如果它们派上用场(由于它们的力量,这种情况经常发生(并且您发现它们很有用,请使用它们。不要进行过早优化。只有当你遇到实际的性能问题时,你才可以考虑解决它们。
序列是闭包函数吗?
不。它只是在一个范围内执行递归。
sequence
是一个变量,它被分配了从 findSequence(24);
返回的值
不,不是。您只是在函数中递归并返回结果。当您执行此类操作时,将创建闭包。
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
相关文章:
- 使用闭包/函数绑定将自函数作为回调传递
- 了解 JavaScript 闭包函数
- 传递多个参数的闭包函数
- 将“(0)”附加到此闭包函数的目的是什么
- 如何复制(新实例)闭包函数
- Javascript 闭包函数参数
- 具有闭包函数作用域的意外行为
- javascript闭包函数可以由用户更改吗
- Javascript:是这个闭包函数
- 为什么闭包函数中的 javascript 变量在多次调用时不会重置为默认值
- Js闭包:函数在第二次调用时失败
- 如何存储闭包函数返回的变量
- javascript闭包函数的用法
- JavaScript闭包函数传递给事件监听器
- 闭包函数问题
- & # 39;这个# 39;匿名闭包函数内部
- 在JavaScript中实现自动记忆(返回闭包函数)
- 不理解闭包函数是如何工作的
- Javascript闭包函数
- 为javascript闭包函数编写jasmine测试规范