Javascript 在JS中是否有删除已用函数或变量的内存明智点?

Javascript 在JS中是否有删除已用函数或变量的内存明智点?,javascript,Javascript,我知道,它与现实世界相去甚远,语法变得不那么可读,但是: > let fn = {}; > fn[0] = () => { ... console.log(`some work is done`); ... delete fn[0]; ... }; [Function] > fn[0](); some work is done undefined > fn {} 因此,它会在函数返回后删除该函数。这样做有理论意义吗?它释放了内存还是什么?谢谢 编辑:“0”可能是函

我知道,它与现实世界相去甚远,语法变得不那么可读,但是:

> let fn = {};
> fn[0] = () => {
... console.log(`some work is done`);
... delete fn[0];
... };
[Function]
> fn[0]();
some work is done
undefined
> fn
{}
因此,它会在函数返回后删除该函数。这样做有理论意义吗?它释放了内存还是什么?谢谢


编辑:“0”可能是函数的实际名称,因此
fn
object可能是保存所有声明变量的地方,防止它们四处浮动。但是,这不是重点。

如果您只是暂时需要该函数,可以使用
let
将其分配给块范围变量

{
    let fn = () => { some code };
    do stuff here
    fn();
    do more stuff here
}

如果您只是暂时需要该函数,可以使用
let
将其分配给块范围变量

{
    let fn = () => { some code };
    do stuff here
    fn();
    do more stuff here
}

delete
操作符本身会导致性能下降,因此,当您不需要真正改变对象的形状时,请避免使用它。如果您知道该函数只使用一次,为什么不使用IIFE?让函数从容器中删除它自己似乎有点可疑,因为任何可能调用它的地方都必须测试它的存在。
fn
对象的意义是什么?它还将包含哪些其他值?调用
0
后会发生什么?只有有了这些信息,我们才能真正回答这个问题。@nnnn立即调用iLife,但可能需要延迟调用。我以前使用过类似的模式进行延迟求值,在不再需要thunk函数时将其置零。使用
let
将该函数分配给局部变量。当作用域结束时,函数将消失。
delete
操作符本身会导致性能回归,因此在不需要真正改变对象形状时,请避免使用它。如果您知道函数只使用一次,为什么不使用IIFE?让函数从容器中删除它自己似乎有点可疑,因为任何可能调用它的地方都必须测试它的存在。
fn
对象的意义是什么?它还将包含哪些其他值?调用
0
后会发生什么?只有有了这些信息,我们才能真正回答这个问题。@nnnn立即调用iLife,但可能需要延迟调用。我以前使用过类似的模式进行延迟求值,在不再需要thunk函数时将其置零。使用
let
将该函数分配给局部变量。当作用域结束时,函数将消失。或者您可以创建一个IIFE
(()=>{console.log('hello world')})(
),或者您可以创建一个IIFE
(()=>{console.log('hello world')})(