我从一些教程中听到,在函数内定义函数是不好的做法。
在我的情况下,我需要在两个嵌套回调中重用一些代码。例如:
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
。这是错的吗?
我在这个“代码”中使用不良做法吗?我可以做得更好吗?
答案 0 :(得分:1)
如果在回调范围内定义doRequest()
,则它仅存在于该范围内。它被称为闭包,它在许多情况下都很有用。因此,如果您只在此范围内使用此功能,则不会出现问题,因为您不会复制内容。
另一方面,如果doRequest()
执行泛型函数并且不从回调中访问数据(不作为参数发送),则应在外部定义,以便以后可以重用它。
最后,它实际上是平衡代码维护性,性能和数据访问的问题。这是关于scopes and closures的教程。