javascript - Lambda 函数返回具有不同内存位置的函数?

标签 javascript lambda functional-programming closures

这是我正在尝试使用的一些代码

const someFunc = (a) => (b) => a + b;
const someArray = [1, 2];
const firstOrder = someArray.map(a => someFunc(a));

firstOrder[0] === firstOrder[1]; // returns false 

我不确定为什么这是一个具有不同内存位置的函数。

我期望完成类似的功能,其中

firstOrder[0] === firstOrder[1]; // should return true

我不确定这样的事情是否可能。

这里的主要动机是避免内存占用。

我想我需要一些帮助。

提前致谢。

最佳答案

正如评论中所说,具有不同作用域的函数永远不会彼此 ===

简单函数的内存开销几乎为零,尤其是在现代硬件和现代 JS 引擎上,因此在为此付出努力之前,请确保这不是 premature optimization 的情况。 - 运行性能测试,并首先确保这实际上是瓶颈。

您当前正在传递一个函数数组,大概是这样它们可以被迭代并被稍后的东西调用。考虑传递someArray和一个带有2个参数并返回一个数字的someFunc;原语数组比函数数组占用更少的内存。例如,以下代码在 Chrome 上占用了我约 1,400M 的内存:

const someFunc = (a) => (b) => a + b;
const arrayOfFunctions = Array.from({ length: 1e7 }, (_, i) => someFunc(i));
// eventually use arrayOfFunctions

但是,如果您只存储 someArray,并且仅在需要访问它返回的最终数字时才调用该函数,则内存占用会轻得多:

const someFunc = (a, b) => a + b;
const someArray = Array.from({ length: 1e7 }, (_, i) => i);
// eventually, once you need access to the final numbers, iterate through someArray and call someFunc with it:
// ...
const theBArgument = 5;
const result = someArray.map(a => someFunc(a, theBArgument));

结果之前,这对我来说仅在 Chrome 上使用约 120M 内存。

关于javascript - Lambda 函数返回具有不同内存位置的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824763/

相关文章:

javascript - Bootstrap 选项卡可通过按钮上一个/下一个在选项卡之间移动

c# - 如何在 lambda 表达式期间使 IList 兼容 IEnumerable?

c++ - lambda 中的虚拟参数可以匹配任何类型吗?

lambda - 在 NetLogo 中运行具有可变数量参数的任务

Java lambda 返回一个 lambda

javascript - 如何旋转和调整 Canvas 大小,同时保持旋转的纵横比并调整高度?

javascript - Sencha Touch 2-如何从 View 中的存储中删除 Controller 中的All()?

javascript - node.appendChild 在 <= IE9 中的行为不符合预期(尚未检查 10)

haskell - 什么是更自由的单子(monad)?

ios - 跳出 filter() 函数