Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript循环索引声明在循环体外部还是内部? vari; 对于(i=0;i_Javascript_Loops_For Loop - Fatal编程技术网

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;
}