在javascript中动态重写函数的后果?

Ala*_*lan 7 javascript

在javascript中,您可以重写一个函数,如下所示:

function foo() { 
   setTimeout(function() {
        alert('sup stallion');
        foo = function() { //rewrite foo to nolonger wait 4 seconds to alert.
             alert('sup stallion');
        }
   }, 4000);
}
Run Code Online (Sandbox Code Playgroud)

显然这是一个人为的例子,但这种方法在概念上是否有任何错误(除了竞争条件).

Guf*_*ffa 7

自修改代码可能令人困惑,并且难以调试,因此通常可以避免.

除此之外没有问题,也没有竞争条件.

  • 这不是自修改代码.它正在做一个定义明确的事情:用一个新函数替换包含函数的绑定`foo`. (2认同)