为啥许多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 仍在将 let
和 const
转换为 var
,尽管它发现两个变量或常量分别用 let
和 const
声明在相同的功能,它会被赋予不同的名字。
主要原因是,很少有浏览器没有更新以支持 ES6 语法。目前,大部分浏览器都支持 ES6/ES7 代码而无需转译,Firefox 甚至支持 2021 的部分功能。您可以查看compatibility here。
之所以有很多代码和示例仍然使用 var,是因为并非每个开发人员都经过他们的 repos 并更新了代码。
那么你现在应该使用 var 吗?
不!除非真的、真的、真的有特定的理由让您使用var
,否则请使用let
或const
。
【讨论】:
【参考方案2】:const
和let
在大多数情况下更好,但仍有少数情况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'? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 var x = x = x || 比 var x = x || 更彻底?
在javascript中为啥使用“ var that = this” [重复]