重新声明一个 javascript 变量

IT技术 javascript variables declaration
2021-02-24 15:41:59

教程中写道:

If you redeclare a JavaScript variable, it will not lose its value.

为什么要重新声明变量?在某些情况下是否实用?

谢谢

6个回答

这无非是提醒您,如果您这样做:

var x=5;
var x;
alert(x);

结果将是 5。

例如,如果您在某些其他语言中重新声明变量 - 结果将是未定义的,或 NaN,但不是在 javascript 中。

有趣的。当我尝试重新声明一个类时,我遇到了同样的错误。我有一个带有通用说话功能的 Animal 类,看起来像console.log(this.name + 'makes a sound.'). 当然,在我声明之后,我意识到'make引号和单词之间需要一个空格。所以我导航到条目,相应地修复它并重新提交,认为新声明会覆盖以前的声明。显然,这不是 javascript 的工作方式。那么我该如何处理呢?
2021-04-21 15:41:59
我认为指出如果你这样做var x=5; var x=x+10; alert(x);结果将是 15也很有用,即在第二个中var,第一个分配的 x 的原始值var是可访问的,并且可以在 RHS 表达式中使用。
2021-05-02 15:41:59
如果使用 let 或 const 重新声明变量,JavaScript 会抛出错误。但是,使用 var 重新声明变量不会引发异常。后面的声明只是掩盖了前面的声明。
2021-05-13 15:41:59

可以在Google Analytics 中找到重新声明变量的示例当 Google Analytics 脚本启动 JavaScript 跟踪代码时,它_gaq以这种方式声明或重新声明

var _gaq = _gaq || [];

换句话说,如果_gaq已经定义,_gaq则“重新声明”为它自己。如果未定义,则首次声明为空数组。

这允许 Google Analytics 跟踪代码支持其他脚本,这些脚本可能需要在 Google Analytics 代码启动之前使用该变量。正如@xralf 指出的那样,JavaScript 允许这样做。

在无法知道变量是否已定义的情况下,重新声明变量很有用。

通过有条件地重新声明一个变量,就像 Google Analytics 跟踪代码所做的那样,它允许一个变量安全地来自多个地方。

在这个例子中,使用该_gaq变量的其他代码同样检查预定义的_gaq变量可能是安全的如果它存在,它知道它可以使用它。如果它不存在,它知道应该在尝试使用它之前定义它。

非常好的答案,+1,特别是关于允许变量“安全地源自多个地方”的注释。当您将 JS 块重构为单独的文件并希望能够根据需要使用零碎的部分时,能够完全按照您在_gaq示例中提到的内容(但是,可怕的变量名称,不是吗?)会有所帮助。
2021-05-05 15:41:59

为什么要重新声明变量?

你不应该。它使代码变得混乱。

在某些情况下是否实用?

不。

你的回答很好,但我只能选择一个接受。
2021-05-03 15:41:59
这更像是意外或不知不觉地重新声明了一个变量。
2021-05-04 15:41:59
我假设有一些实际情况。例如,我最近的愿望是在循环内有一个变量,在循环外有一个常量。这是因为有几个兄弟循环,每一半都与'x'有关,因此修改'x',但每个都应以相同的初始x值开始。
2021-05-06 15:41:59
如果我在一个函数中有两个非嵌套循环,并且声明var i=0的循环只在声明它的循环中使用,为什么我要为第二个循环发明另一个名称?所以这至少是一个例子,其中变量重新声明是实用的,我认为
2021-05-13 15:41:59
我的意思是,以这种方式工作更方便。您可以操作(复制/粘贴等)代码行,而几乎没有(至少少得多)关于是否应该添加/删除变量声明的注意事项
2021-05-14 15:41:59

在 javascript 中没有块作用域,因此建议重新声明一个变量以进行澄清;这有助于编写更好的代码。

例如:

for (var x=0; x< 100; x++) { }

alert(x); //In most languages, x would be out of scope here.
          //In javascript, x is still in scope.


//redeclaring a variable helps with clarification: 
var x = "hello";
alert(x);
现在有letconst
2021-04-19 15:41:59

不会因为吊装而失去value

var x = 5;
var x;

// this is same as

var x; // undefined;
x = 5;

所以当你说“如果你重新声明一个 JavaScript 变量,它不会失去它的value。”

根据提升,所有声明都移到顶部。然后变量被赋值。

var x = 25;
var x; // redeclare first time
var x; // redeclare second time

// is same as 

var x; // undefined
var x; // Not sure if this happens, but doesn't make a difference, it's still undefined
x = 25;

至于实用性,它有时会发生。看看@steveoliver 的回答。