【问题标题】:Is a Self-Modifying Function Bad? [closed]自修改函数不好吗? [关闭]
【发布时间】:2014-01-24 07:54:15
【问题描述】:

如果我想让一个函数在第一次运行时做一些不同的事情,我可以在每次运行时检查它以确定它是否是第一次,或者我可以更改函数;像这样:

foo=function(a,b){
    ...do something1...
    foo=_foo;
}
_foo=function(a,b){
    ...do something2...
}

这很糟糕吗?如果是这样,为什么?有一个更好的方法吗?我特别希望在 javascript 中实现这一点,但会考虑其他语言点。

【问题讨论】:

  • 我通常使用静态变量(属性)作为标志来处理“首次运行”场景
  • 这真的取决于你想如何修改函数。通常,这用于缓存,因此它只是函数用户不应该注意到的性能增强。如果是这样的话,那就没问题了。如果没有,您可能需要详细说明您的具体情况。
  • 几乎总是很糟糕。过去我们会为资源受限的系统编写自修改代码,而您的浏览器不是其中之一。 IMO,即使是记忆也不是一个很好的借口,但这不是技术辩论。
  • 函数是对象。你最好有一个函数,一个简单的if (!foo.hasrun) { foo.hasrun = true; first time code; } else { next run code } 类型的东西。

标签: javascript function-pointers control-structure


【解决方案1】:

这不是严格意义上的“自我修改”功能 - 您不会即时修改任何代码(并且 会很糟糕),只需将另一个值分配给函数名。这在大多数情况下都很好,并且使多态代码非常简单和优雅。为了使意图更清晰,您可以将“第一次”代码分解为一个单独的函数:

function firstTimeFoo() {
    .....
    foo = normalFoo
}

function normalFoo() {
    ...
}

foo = firstTimeFoo

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 2021-03-15
    • 2017-05-06
    • 2019-07-15
    • 2014-02-13
    • 1970-01-01
    • 2020-10-29
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多