所以这是我正在尝试使用的一些代码
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
我不确定是否甚至可以实现这种目的。
这里的主要动机是避免占用内存。
我想我可以在这里使用一些帮助。
先谢谢了。
答案 0 :(得分:2)
如评论中所述,具有不同作用域的函数永远不会相互===
。
简单函数的内存开销几乎为零,尤其是在现代硬件和现代JS引擎上,因此,在为此付出努力之前,请确保这不是premature optimization的情况-运行性能测试,并确保这首先是瓶颈。
您当前正在传递一组函数,大概是为了让它们可以迭代并稍后由某些函数调用。考虑绕过{em> just someArray
和一个someFunc
,它们接受2个参数并返回一个数字;基本数组比函数数组占用更少的内存。例如,以下代码为我占用了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));
在result
之前,这对我来说仅占用Chrome上的约1.2亿内存。