Memory management 函数式编程和内存管理
根据我的理解,函数式编程的一个特点是我们处理可变对象的方式 例:Memory management 函数式编程和内存管理,memory-management,functional-programming,mutable,Memory Management,Functional Programming,Mutable,根据我的理解,函数式编程的一个特点是我们处理可变对象的方式 例: var notFunctionalFilter=function(objectArray){ 对于(var i=0;i
var notFunctionalFilter=function(objectArray){
对于(var i=0;i
我倾向于用“Functional方式”编写越来越多的代码,因为它感觉更干净(特别是在使用漂亮库的JS中,但这不是主题)
事实上,最近有很多关于这个话题的文章,比如这篇非常好的文章:
但是有一件事在那里从未被讨论过,那就是内存管理。以下是我的问题:
- 我们是否同意
比functionalFilter
使用更多内存notFunctionalFilter
- 在决定如何编写
函数时,是否应考虑这一点filter
- 或者垃圾收集器是否能够完美地处理这一问题(在大多数语言中),因为它是以函数方式编写的
谢谢这是一个轻微的旁白,但您的功能过滤器应如下所示:
var functionalFilter=功能(项目){
返回项目.active;
};
使用方法如下:
var filtered=objectArray.filter(functionFilter);
你的“功能过滤器”唯一的“功能”是它没有副作用。函数式编程和函数式JS远不止这些
至于记忆。是的,它使用更多。。。大概某种程度上。我假设您正在传递一个基于名称的对象数组。使用内置的Array.filter
可以最大限度地减少这种情况,但在代码中额外的内存占用很小
JS中的对象是通过引用传递的,这意味着新数组只是指向原始对象的指针数组。(警告:这意味着在filtered
中更改它们也会在objectArray
中更改它们。除非进行深度克隆)数组包装器相对较小,甚至不值得在内存中讨论
var notFunctionalFilter = function(objectArray) {
for (var i=0; i< objectArray.length; i++) {
if (objectArray[i].active) {
objectArray.splice(i, 1);
i --;
}
}
return objectArray;
};
var functionalFilter = function(objectArray) {
var filtered = [];
for (var i=0; i< objectArray.length; i++) {
if (objectArray[i].active) {
filtered.push(objectArray[i]);
}
}
return filtered;
};