【发布时间】: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!那更可怕!
所以我问一个好的做法,在这种情况下如何声明游标变量?
需要你的帮助。
【问题讨论】:
-
在 some JavaScript 中有块作用域:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@MattBall 不错,不过好像支持不广泛,我在chrome调试器下使用失败。
-
两种方式都在做同样的事情,而且这两种做法都已经很成熟了。
标签: javascript variables scope