在多个for循环中重新声明变量- for(var i ..)
Re-declaring variable in multiple for loops - for(var i ...)
过去我使用这样的write for循环:
// Count to 10
for(var i = 1; i <= 10; i++) {
console.log(i);
}
var message = "We're done here!";
// Count down by 10's from 100
for(var i = 100; i >= 0; i -= 10) {
console.log(i);
if(i === 0) {
alert(message);
}
}
然后,在没有通过所有语法代码检查器并被告知不要重新声明变量之后,我最终像这样编码,在每个作用域的顶部使用单个var
语句:
var i, message = "We're done here!";
// Count to 10
for(i = 1; i <= 10; i++) {
console.log(i);
}
// Count down by 10's from 100
for(i = 100; i >= 0; i -= 10) {
console.log(i);
if(i === 0) {
alert(message);
}
}
就我个人而言,当您不必担心是否声明了i
时,保留var
似乎会使代码更易于维护。我在多个var
声明中看到过类似的问题。如果解释器只是简单地忽略附加声明,并将其视为赋值,我不明白为什么这可能是一件坏事。
那么,如果忽略所有的约定和样式指南,在每个循环中重新声明i
是否可能导致任何问题,性能或其他方面的?
(除了语法检查失败和Douglas Crockford生你的气)。
所以,如果你忽略所有的约定和风格指南,可以在每个循环中重新声明I可能会导致任何问题,表演还是其他?
不,它不会在运行时引起任何问题或影响性能。
范围内的所有var
声明都被提升到块的顶部(在该块中运行任何代码之前),因此任何dup只是组合在一起。解析器会忽略重复的声明。
我能想到的唯一缺点是它增加了代码的大小(额外的var
),而不是在顶部组合所有的var
声明。但是,如果您运行最小化程序,则应该删除额外的大小。
var
声明会导致读者或编码人员意外地认为他们正在声明一个新的,未使用的局部变量,而实际上,该变量已经在使用中,并且可能已经有一个值,并且其他代码可能已经在使用该变量。如果你知道情况并非如此,那么它除了可能使你更容易无意中犯那个错误之外,并没有什么害处。
供参考,对于for
循环,ES6用let
声明解决了这个问题,当在for
循环初始化器中使用时,将声明一个唯一作用域为for
循环的变量。
// Count to 10
for (let i = 1; i <= 10; i++) {
// i is scoped to within this loop only
console.log(i);
}
// Count down by 10's from 100
for (let i = 100; i >= 0; i -= 10) {
// i is scoped to within this loop only
console.log(i);
if(i === 0) {
alert(message);
}
}
对于我的个人风格,我发现如果我保留var
声明和for
循环,即使我重用相同的变量(更容易移动代码并查看声明在哪里),我的代码更易于维护。我只是发现每个循环都更加独立。而且,如果我试图在for
循环之外使用循环变量,我会以不同的方式声明它(在循环之外)。显然,如果我在ES6环境中,我将为for
循环变量使用let
。
我避免在函数中重新声明任何其他变量,因为这看起来更像是一个错误,而不是有目的的意图,并且重新声明它似乎很少对维护有好处。
- 使用javascript使用for循环声明变量
- JavaScript-用for循环项声明变量
- 在for循环中声明i时使用var
- JavaScript + mocha:可能是在 for 循环中声明函数的闭包问题
- for 循环中必需的变量声明
- 在 javascript 中 for 循环的每次迭代中声明一个新的、唯一的变量是一种好方法
- 在 for 循环中声明变量时出错
- 声明一个关联数组以在 for 循环中使用
- 在 JavaScript 中,在 for 循环中声明多个变量
- Javascript:为什么我需要在for循环中声明var I=0
- 我应该如何在javascript中声明for cursor变量
- Angular的ng-change for select不调用声明的方法
- for的区别.In和for循环,以及counter声明
- 在for语句中声明的变量似乎是全局的
- 对于Jade中node.js中声明的变量,For循环在javascript中不起作用
- 在javascript中声明for循环函数
- 带有对象声明和IN保留字的Javascript for()循环-只是想澄清一下
- 添加属性in for ..在声明
- jsLint for循环声明
- 如何用"%20"在javascript中"for"声明