这是我正在尝试使用的一些代码
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/