影响回调变量是不好的做法?

时间:2013-03-10 18:15:12

标签: javascript node.js asynchronous

以异步节点函数fs.stat()为例。如果我需要在文件上使用fs.stat(),然后稍后再次执行,结果将被遮蔽。

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

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

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

2 个答案:

答案 0 :(得分:6)

意见很重要,但我会说是 - 不好的做法。无论如何,这里有两个问题

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

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

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

答案 1 :(得分:0)

是的,这是不好的做法。取决于开发人员查看它可以获得多么糟糕。如果我得到这样的东西,我脑海中浮现的第一件事就是

为什么他将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) {
  });