这是不好的做法,以影子变量的回调

Is it bad practice to shadow variables of a callback?

本文关键字:影子 变量 回调      更新时间:2023-09-26

以异步Node函数fs.stat()为例。如果我需要在文件上使用fs.stat(),然后稍后再做一次,结果将被阴影显示。

fs.stat(file, function(err, stats) {
  fs.stat(file, function(err, stats) {
  });
});

err变量,以及stats变量被遮蔽-如果我不会在第二个内使用第一个回调,这是否重要?重命名第二个回调变量是否更好?

一次或多次覆盖这些变量是否对性能有影响?

这是个人意见,但我认为是——糟糕的做法。无论如何,这里有两个问题

  • 对于下一个需要处理这段代码的人(可能是你)来说,这可能会令人困惑。

  • 在将来的某个时候,您可能需要访问外部值以提供一些新功能(例如,希望确保两个文件对象具有相同的类型?)。进行这种更改将需要对整个代码块进行令人讨厌且容易出错的编辑。

现在使用不同的名称,以防止以后出现问题。

是的,这是不好的做法。这取决于开发者如何看待它的糟糕程度。如果我得到这样的东西,我首先想到的就是

为什么他传递errstats到这个回调?

fs.stat(file, function(err, stats) {
                        ''    ''
                         ''    ''
  fs.stat(file, function(err, stats) {
  });
});

当在同一个函数的多个实例中工作时,就像你现在正在做的那样。你必须确保所有的变量都可以被独立访问。

除非您确定一个变量或结构不再被使用,否则您可以重新使用它。但是你必须在有用的评论中提到这一点,以确保其他开发人员理解它。


更新:

这些回调函数上的变量有作用域限制,所以它们不会影响函数声明之外。

一个有效的例子是:

  fs.stat(file, function(err, stats) {
  });
  //Another similar functions somewhere with same varialbes
  fs.stat(file2, function(err, stats) {
  });