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

Javascript Lambda函数返回具有不同内存位置的函数?,javascript,lambda,functional-programming,closures,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] === fir

下面是我尝试使用的一些代码

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引擎上,因此在花费精力进行这项工作之前,请确保这不是一个性能测试的案例,并确保这实际上是一个瓶颈

您当前正在传递一个函数数组,大概是为了让它们可以被迭代并在以后被调用。考虑一下绕过<代码> SooRayRe<代码>和<代码> FunFunc<代码>,它需要2个参数,并返回一个数字;基元数组比函数数组占用的内存少。例如,以下代码占用了我在Chrome上约1400M的内存:

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的内存。

如评论中所述,具有不同作用域的函数永远不会相互关联

一个简单函数的内存开销几乎为零,特别是在现代硬件和现代JS引擎上,因此在花费精力进行这项工作之前,请确保这不是一个性能测试的案例,并确保这实际上是一个瓶颈

您当前正在传递一个函数数组,大概是为了让它们可以被迭代并在以后被调用。考虑一下绕过<代码> SooRayRe<代码>和<代码> FunFunc<代码>,它需要2个参数,并返回一个数字;基元数组比函数数组占用的内存少。例如,以下代码占用了我在Chrome上约1400M的内存:

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的内存。

具有不同作用域的函数永远不会相互关联。不过,这听起来有点像过早的优化,除非您正在运行性能测试并确定这确实是一个瓶颈。。?如果必须的话,我会保存对
someArray
的引用,并使用该引用和返回数字而不是函数的
someFunc
,而不是使用
.map
,这样你在内存中只有一个基元数组和一个函数,
someFunc(1)
someFunc(2)
是非常不同的函数,不是吗?当使用相同的输入调用时,它们甚至不会返回相同的结果:
someFunc(1)(3)
!=
someFunc(2)(3)
@CertainPerformance不确定我是否得到了它,如果你能写一些代码它会非常有帮助。具有不同作用域的函数永远不会相互关联。不过,这听起来有点像过早的优化,除非您正在运行性能测试并确定这确实是一个瓶颈。。?如果必须的话,我会保存对
someArray
的引用,并使用该引用和返回数字而不是函数的
someFunc
,而不是使用
.map
,这样你在内存中只有一个基元数组和一个函数,
someFunc(1)
someFunc(2)
是非常不同的函数,不是吗?当使用相同的输入调用时,它们甚至不会返回相同的结果:
someFunc(1)(3)
!=
someFunc(2)(3)
@CertainPerformance不确定我是否得到了它,如果你能写一些代码,那将非常有帮助。