这里也有类似的问题,但它们并没有真正回答我的问题。所以我很好奇为什么我们不能在java中声明同一个变量两次?例如:
int a = 4; int a = 6;
这在java中是行不通的。但是在javascript中,这实际上是可行的:
var a = 1; var a = 2;
在javascript中,人们说声明立即被移到了开头,所以变成这样:
var a; a = 1; a = 2;
csbfibhn1#
简单而明显的答案是,编译器不允许您这样做。但现在让我们更进一步-为什么这是需要的?这里的原因是两次声明一个变量是错误的标志。它通常意味着三件事之一:变量名不够具体。也许你曾经 int length 两次它就会朝你吠叫。例如,你可能应该让你的名字更具体地表示它的长度 int originalLength 以及 int extendedLength 复制数组或其他东西时。你的方法太长了。为什么你的方法如此之长以至于你需要两个相同的变量?很可能是在复制代码,所以将其合并到一个方法中。你还没有真正想出你的方法。这在某种程度上是数字2的扩展,但事实是,在编写方法之前,应该先确定方法的作用。如果您要添加一个已经存在的变量,这可能意味着您还没有决定这个方法到底在做什么。每一个都是一个主要的代码气味,很可能是未来的bug来源(就在不远处!)在每种情况下,允许您声明一个变量两次都会导致歧义,如果它阻止您编译,则会阻止这种歧义。现在,这是不是意味着没有好的案例?当然。可能有。也许你已经涵盖了所有的基础,你绝对确定重用这个变量是可以的。在这种情况下,只需重新分配它,而不是重新说明它。就我个人而言,我建议不要这样做,但如果你想开枪的话,那是你的脚。:)
int length
int originalLength
int extendedLength
fcy6dtqo2#
现在它已经在javascript中用new let关键字进行了纠正或临时修改,如果您尝试多次初始化同一变量名,它将抛出一个错误
let a = 4; let a = 5;
将在es6中引发错误
f0brbegy3#
如果作用域不重叠,您可以使用相同的变量名,例如,我可以在一个名为“var1”的私有方法中使用一个变量,然后在另一个方法中使用相同的名称,这两者不会冲突但是,由于每次我在同一范围内使用“int var1”,java都会重新声明变量,因此它不允许这样做,因为它是一个冲突的变量名,而在java脚本中,声明只发生一次,因为它是弱类型的
3条答案
按热度按时间csbfibhn1#
简单而明显的答案是,编译器不允许您这样做。但现在让我们更进一步-为什么这是需要的?
这里的原因是两次声明一个变量是错误的标志。它通常意味着三件事之一:
变量名不够具体。也许你曾经
int length
两次它就会朝你吠叫。例如,你可能应该让你的名字更具体地表示它的长度int originalLength
以及int extendedLength
复制数组或其他东西时。你的方法太长了。为什么你的方法如此之长以至于你需要两个相同的变量?很可能是在复制代码,所以将其合并到一个方法中。
你还没有真正想出你的方法。这在某种程度上是数字2的扩展,但事实是,在编写方法之前,应该先确定方法的作用。如果您要添加一个已经存在的变量,这可能意味着您还没有决定这个方法到底在做什么。
每一个都是一个主要的代码气味,很可能是未来的bug来源(就在不远处!)在每种情况下,允许您声明一个变量两次都会导致歧义,如果它阻止您编译,则会阻止这种歧义。
现在,这是不是意味着没有好的案例?当然。可能有。也许你已经涵盖了所有的基础,你绝对确定重用这个变量是可以的。在这种情况下,只需重新分配它,而不是重新说明它。就我个人而言,我建议不要这样做,但如果你想开枪的话,那是你的脚。:)
fcy6dtqo2#
现在它已经在javascript中用new let关键字进行了纠正或临时修改,如果您尝试多次初始化同一变量名,它将抛出一个错误
将在es6中引发错误
f0brbegy3#
如果作用域不重叠,您可以使用相同的变量名,例如,我可以在一个名为“var1”的私有方法中使用一个变量,然后在另一个方法中使用相同的名称,这两者不会冲突
但是,由于每次我在同一范围内使用“int var1”,java都会重新声明变量,因此它不允许这样做,因为它是一个冲突的变量名,而在java脚本中,声明只发生一次,因为它是弱类型的