簡體   English   中英

我應該如何在javascript中聲明游標變量?

[英]How should I declare for cursor variable in javascript?

我們知道,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塊內有一個范圍,但實際上是NOT。


如果不是這樣:

我應該在函數前面明確聲明所有游標嗎?

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
}

如果我以這種方式編碼,我認為代碼很糟糕:它在聲明和使用之間有很長的距離,並且在聲明時它們的含義模糊不清。

如果我省略所有聲明,只是使用,這些游標變量屬於全局變量 那太可怕了!


所以我要求一個好的做法,在這種情況下如何聲明游標變量?

需要你的幫助。

通常,最簡單的方法是聲明變量,然后在多個非嵌套循環中使用它。

var i;

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

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

在多個循環中重用i沒有問題。 第二個循環開始后,該值將設置為初始值,一切正常。

聲明變量將其提升到函數的頂部,並且連續的聲明在語法上是合法的但是被忽略。 所以:

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的建議)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM