Javascript 对回调的变量进行阴影处理是一种不好的做法吗?

Javascript 对回调的变量进行阴影处理是一种不好的做法吗?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,以异步节点函数fs.stat()为例。如果我需要在文件上使用fs.stat(),然后稍后再使用,结果会被隐藏 fs.stat(file, function(err, stats) { fs.stat(file, function(err, stats) { }); }); err变量以及stats变量都被隐藏了-即使我不在第二个回调中使用第一个回调,这是否重要?重命名第二个回调变量更好吗 一次或多次覆盖这些变量会对性能产生影响吗?这是一个意见问题,但我会说是的,这是一个糟糕的做法。无论

以异步节点函数
fs.stat()
为例。如果我需要在文件上使用
fs.stat()
,然后稍后再使用,结果会被隐藏

fs.stat(file, function(err, stats) {
  fs.stat(file, function(err, stats) {
  });
});
err
变量以及
stats
变量都被隐藏了-即使我不在第二个回调中使用第一个回调,这是否重要?重命名第二个回调变量更好吗


一次或多次覆盖这些变量会对性能产生影响吗?

这是一个意见问题,但我会说是的,这是一个糟糕的做法。无论如何,这里有两个问题

  • 这可能会让下一个需要处理此代码的人(可能是您)感到困惑

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


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

是的,这是一种不好的做法。这取决于开发人员查看它的情况,以及它可能会变得多么糟糕。如果我得到了这样的东西,我脑海中首先闪现的就是

为什么他要将
err
stats
传递给这个回调

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) {
  });

@回调中的这些变量具有范围限制。因此,外部不会受到影响,问题发生在内部。