【问题标题】:How should I declare for cursor variable in javascript?我应该如何在javascript中声明游标变量?
【发布时间】:2014-09-10 23:02:07
【问题描述】:

我们知道,javascript 没有BLOCK SCOPE,所以当我写了一个如下的 for 循环时:

list = [1, 2, 3, 4];
// notice about the `var` keyword
for(var i = 0; i < list.length; ++i) { 
    // Do something.
}
console.log(i); // shows 4

问题是:我应该使用var来声明变量i吗?


如果是这样:

当我有两个或多个连续的for循环时,我想使用同一个游标变量i,它会被多次声明!那简直有问题!

for(var i = 0; i < list1.length; ++i) {
    // do something.
}

for(var i = 0; i < list2.length; ++i) {
    // do something.
}

// `i` was declared more than once!

在这种形式中,游标变量i 可能会多次声明,而代码本身暗示i 变量很可能在for 块内具有作用域,但实际上不是。


如果不是这样:

我应该在函数前面显式声明所有的游标吗?

var i, j, k; // and maybe a long list that I didn't expected?

// Maybe some other code.

for(i = 0; i < count1; ++i) {
    // do something
}

for(j = 0; j < count2; ++j) {
    // do something
}

for(k = 0; k < count3; ++k) {
    // do something
}

如果我这样编码,我认为代码很糟糕:它在声明和使用之间有很长的距离,并且在声明时不清楚它们是什么。

如果我省略所有的声明,只使用它们,这些游标变量将落入globals!那更可怕!


所以我问一个好的做法,在这种情况下如何声明游标变量?

需要你的帮助。

【问题讨论】:

标签: javascript variables scope


【解决方案1】:

通常最简单的方法是声明变量,然后在多个非嵌套循环中使用它。

var i;

for(i = 0; i < list1.length; i++) {
    // do something.
}

for(i = 0; i < list2.length; i++) {
    // do something.
}

在多个循环中重用i 没有问题。第二个循环一开始,值就设置为初始值,一切正常。

【讨论】:

  • 我认为++i引起的问题不存在,它不是循环条件。 @亚历克斯韦恩
  • 在循环的更新部分使用++ii++没有区别。条件中不使用表达式的结果。
【解决方案2】:

声明一个变量会将其提升到函数的顶部,并且连续声明在语法上是合法的,但会被忽略。所以:

var i, j, k; // and maybe a long list that I didn't expected?

// Maybe some other code.

for(i = 0; i < count1; ++i) {
// do something
}
...

如果您多次声明,解释器在后台执行的操作。

因此,以这种方式(顶部的变量)声明它通常是人们建议的(以及 JSLint 建议的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多