重用 if 语句中的代码。 (函数内部函数是不好的做法吗?)

Reuse code inside if statement. (Is function inside function bad practice?)

我听一些教程说在函数内部定义函数是不好的做法。

在我的例子中,我需要在两个嵌套回调中重用一些代码。例如:

router.get('...', function(req, res) {
  db.on('load', function(){
    function doRequest() {
      // Valid token required to do the request.
    }

    if (!validToken) {
      getValidToken().then(... doRequest() ...)
    }
    else {
      doRequest()
    }
  });
});

你看到函数 doRequest() 是在其他函数(回调)中定义的。将来某天我可能需要做这样的事情,但是在我defined里面function。有错吗?

我在这个 "code" 中使用了不好的做法吗?我可以做得更好吗?

如果doRequest()定义在回调范围内,它只会存在于那个范围内。它称为闭包,在许多情况下都很有用。所以如果你只在这个范围内使用这个函数,这不是问题,因为你不会复制内容。

另一方面,如果 doRequest() 执行通用函数并且不从回调中访问数据(不作为参数发送),则应在外部定义它,以便以后可以重用。

归根结底,这确实是一个平衡代码可维护性、性能和数据访问的问题。这是关于 scopes and closures.

的教程