回调函数中的变量别名是一种不好的编程实践吗?

7

以异步 Node 函数 fs.stat() 为例。如果我需要在文件上使用 fs.stat(),然后稍后再次使用它,则结果会被覆盖。

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

err变量和stats变量都被遮蔽了——如果我不会在第二个回调函数中使用第一个回调函数,这会有影响吗?更好的做法是将第二个回调函数变量重命名吗?

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

2个回答

7
观点不同,但我认为是不好的实践。无论如何,这里存在两个问题:
- 对于下一个需要处理此代码的人(可能是你),这可能会令人困惑。 - 将来某个时候,您可能需要访问外部值以提供一些新功能(例如,要确保两个文件对象具有相同的类型?)。 进行更改将需要繁琐且容易出错地编辑整个代码块。
现在使用不同的名称以避免以后出现问题。

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

@hexacyanide 在回调函数中的那些变量有作用域限制。因此,它们之外的变量不会受到影响,问题发生在它们内部。 - Starx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接