也許我不知道for
循環索引變量是如何得到作用域的,但是當我的一個循環沒有完成時,我感到非常驚訝,這似乎是因爲從循環中調用的函數包含i
,因爲它的for
循環索引與好。循環索引變量的Javascript成爲全局範圍的一部分?
這裏有一個小劇本我放在一起演示此行爲:
var loopOne = function(test) {
for(i = 0; i < test.length; i++)
console.log(getMask(test));
};
var getMask = function(pass) {
var s = "";
for (i = 0; i < pass.length; i++) {
s = s + "*";
}
return s;
};
loopOne('hello');
如果我跑這在Chrome中,並期待在控制檯日誌,我應該看到*****
五倍。但是,我只看到它一次。經過進一步檢查,如果我在Chrome瀏覽器控制檯輸入i
,它將輸出6(= 'hello'.length + 1
)。這使我認爲i
已成爲全球範圍的一部分,並不侷限於需要它的for
循環的範圍。
這是正確的嗎?如果是這樣,在javascript中定義for
循環的索引變量有什麼更好的做法?
「如果找不到,則該變量在最高範圍內創建。」這只是邪惡。感謝使用'var'的範圍解釋。現在你提到它,我應該記住這一點。 – 2011-05-18 01:39:12
@Ben事實上,這是Javascript的許多缺陷之一。 AFAIK這是正在/被糾正在最新的ECMAScript規範。 – deceze 2011-05-18 01:40:13
我想只有當你加上''use strict'''。 – alex 2011-05-18 01:55:08