自我修改功能是不是很糟糕?

时间:2014-01-06 19:46:00

标签: javascript function-pointers control-structure

如果我希望函数在第一次运行时执行不同的操作,我可以在每次运行时检查它是否是第一次,或者我可以更改函数;像这样的东西:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

function normalFoo() {
    ...
}

foo = firstTimeFoo