重用 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.
的教程
我听一些教程说在函数内部定义函数是不好的做法。
在我的例子中,我需要在两个嵌套回调中重用一些代码。例如:
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.
的教程