为啥许多javascript示例仍然使用'var'而不是'const'和'let'? [关闭]

Posted

技术标签:

【中文标题】为啥许多javascript示例仍然使用\'var\'而不是\'const\'和\'let\'? [关闭]【英文标题】:why many examples of javascript still using 'var' instead of 'const' and 'let'? [closed]为什么许多javascript示例仍然使用'var'而不是'const'和'let'? [关闭] 【发布时间】:2021-04-16 04:32:29 【问题描述】:

如cubejs:

<script>
  var cubejsApi = cubejs(
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzOTk5MjcsImV4cCI6MTU1MjQ4NjMyN30.SOO-A6GfGH7ar3EoeBb0cjj10BVxO3ffjvmqQziXIZA',
     apiUrl: 'http://localhost:3000/cubejs-api/v1' 
  );
 ...
</script>

比如vue或者nodejs的例子 我现在应该使用“var”吗?

【问题讨论】:

"我现在应该使用 'var' 吗?" 不。 因为还没有使用var 更新互联网上的每个代码示例! 新东西? -> 使用let/const;老东西? -> 如果有效,请不要触摸它。如果您仍然要重构代码,那么这可能是列表中的另一点。 What are some reasons to use var instead of let in javascript? 和 Can I completely stop using var? @Andreas Google 的编码风格指南(每当我的雇主认为公司需要编码标准时,我都会推荐它)特别有一个部分说你不应该编辑旧代码,除非你有一个错误需要修复.主要原因是,对一些微不足道的事情进行大的更改会污染 repo 历史,并使调试时代码更改的推理变得更加困难 【参考方案1】:

一两年前,Babel 仍在将 letconst 转换为 var,尽管它发现两个变量或常量分别用 letconst 声明在相同的功能,它会被赋予不同的名字。

主要原因是,很少有浏览器没有更新以支持 ES6 语法。目前,大部分浏览器都支持 ES6/ES7 代码而无需转译,Firefox 甚至支持 2021 的部分功能。您可以查看compatibility here。

之所以有很多代码和示例仍然使用 var,是因为并非每个开发人员都经过他们的 repos 并更新了代码。

那么你现在应该使用 var 吗?

不!除非真的、真的、真的有特定的理由让您使用var,否则请使用letconst

【讨论】:

【参考方案2】:

constlet 在大多数情况下更好,但仍有少数情况var 更正确。

对于您直接提问,var 可能仍出于遗留原因使用。它在所有版本的 JavaScript 中都受支持,如果要更改 Internet 上的每个示例,会很麻烦。

var 唯一真正的优势是它的兼容性。如果您正在为 .HTA tools 等旧平台编写代码,或者您必须支持旧平台(如旧手机或只是旧浏览器),那么 var 是您唯一真正的选择。

【讨论】:

"但仍有一些情况下 var 更正确。" 我还没有找到这些情况。我问了很多,而我真正得到的唯一答案是“当你想重新声明一个变量而没有错误时,可以使用 var”。虽然 true,但对此的回应是您不应该重新声明变量。如果这样做,您的应用程序流程不正确,并且您正在使用var 作为创可贴以避免更正它。那么,除了重新声明之外,var 什么时候更正确?编辑:澄清一下,什么时候var更正确,什么时候你也可以使用let/const 如果您不了解引擎的功能,@VLAZ var 更正确。在现代网站上有反对 var 的好论据,但在 .HTA 工具和旧平台上,替代方案是无效的。正如我在回答中所说:遗留原因。我想对于新用户来说也有关于简单性的争论。限制他们必须知道的keywords 的数量才能开始。我不反对let/const,尤其是在现代网络上,但说var 没有用例是完全错误的。 正如我澄清的什么时候可以使用let/const。不言而喻,如果你不能使用它们,那么你只能依靠var。但如果你真的有其他选择,我看不出有任何实际优势。即使为初学者简化事情也是一个不好的理由 - var 只是更复杂,因此更容易陷入奇怪的境地。 For example。如果您真的想减少初学者需要学习的东西,那么只需技术他们let。假设const 是一个巨大的精神负担。 @VLAZ 哎呀,刚刚看到你的编辑。当let/const 可用时,它们是更好的选择,应该在现代互联网上使用。如果你知道那是你的代码将运行的地方,那么不用担心。但是,如果您有一些绝对必须在任何可能访问它的东西上运行的东西,var 可能仍然是更好的关键字。 请注意,在许多情况下您仍然可以使用 Babel 来转译代码。因此,即使目标环境不支持它们,您也可以使用let/const。 Babel 将确保保留代码的语义。例如,function foo(x) if (true) let x = 5; return x; 不会重新分配参数值。 Babel 是否适合给定项目可能会有所不同,但这确实意味着使用 var(除其他外)的理由更少,并且整体代码问题更少。

以上是关于为啥许多javascript示例仍然使用'var'而不是'const'和'let'? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Swift 中使用“let”而不是 var?

为啥 var x = x = x || 比 var x = x || 更彻底?

在javascript中为啥使用“ var that = this” [重复]

为啥 C# 中的诚实函数示例仍然不诚实?

“var”在 JavaScript 中做了啥?为啥有时它是作业的一部分? [复制]

为啥在这个 angular2 示例中我仍然需要 @inject?