Javascript循环索引声明在循环体外部还是内部? vari; 对于(i=0;i
或Javascript循环索引声明在循环体外部还是内部? vari; 对于(i=0;i,javascript,loops,for-loop,Javascript,Loops,For Loop,或 var i; for (i = 0; i < length; i ++) { // do something } for(变量i=0;i
var i;
for (i = 0; i < length; i ++) {
// do something
}
for(变量i=0;i
有什么区别吗
因为我看到一些著名的js模块更喜欢第一个选项2更喜欢避免不必要的全局声明不管怎样,它们都能完成任务 大多数程序员更喜欢第二个,因为它很容易识别和理解初始值,假设有一堆代码
最好总是在包含对该变量的所有引用的最小范围内声明一个变量。如果不需要循环之外的循环计数器,那么在循环范围之外声明它是不必要的,也是不好的做法 语法语法解释清楚
for (var i = 0; i < length; i ++) {
// do something
}
对于
var
来说,这无关紧要,而且无论哪种方式,它的行为都是相同的。在Javascript中,可以提升用var
声明的变量
如果未在for
循环定义的范围之外使用变量,则当前首选项是使用let
而不是var
for ([initialization]); [condition]; [final-expression]) {
// statement
}
for(设i=0;i
这两者在JavaScript中没有区别。在javascript中有函数作用域而不是块作用域的概念,这一点没有区别。
第一个例子是一个古老的C语言流派,但是如果您想在循环之外使用变量,可以使用它(例如:在循环中断时检查它的值)
第二个更常见,更好的可读性,正如@ ABDI2FA所说:“最好在最小范围内声明一个变量,该变量包含对该变量的所有引用”
如果你考虑性能,第一个更好,
为了提高数组的性能,必须在循环之前设置
for (let i = 0; i < length; i ++) {
// do something
}
因此,关心系统性能的开发人员以这种方式编写代码我不确定,但我认为这是错误的。JS将var
变量提升到范围的顶部。所以两者的作用完全相同。如果它是一个let
或const
变量,那就很重要了。ES2016引入了带有let
和const
的块范围概念。
let i = 0;
let len = array.length;
for (; i < len ; i ++) {
// do something
}
let len = works.length - 1;
let i = len;
for (; i >= 0; i--) {
// do something;
}