1

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

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

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

4

1 回答 1

1

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

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

function normalFoo() {
    ...
}

foo = firstTimeFoo
于 2014-01-06T20:08:55.887 回答