[英]setting the length of an array's string element to a variable in a for loop in javascript
[英]Javascript for loop without recalculating array's length
在我的Javascript參考書中,以以下方式優化了for循環:
for( var i = 0, len = keys.length; i < len; i + +) { BODY }
顯然,執行“ len = keys.length”可以防止計算機在每次通過for循環時重新計算key.length。
我不明白為什么這本書沒有寫“ var len = keys.length”而不是“ len = keys.length”? 這本書不是使“ len”成為全局變量嗎?如果您要嵌套兩個遍歷兩個數組的for循環,那么這不好嗎?
例如
for( var i = 0, len = keys.length; i < len; i + +) {
for (var i = 0; len = array2.length; i < len; i++) {
}
}
資料來源:弗拉納根·大衛(2011-04-18)。 JavaScript:權威指南:激活您的網頁(權威指南)(Kindle位置6992-6998)。 O'Reilly Media。 Kindle版。
您可以像這樣鏈接變量聲明
var i = 0, foo="bar", hello = "world"
哪一個與
var i = 0;
var foo = "bar";
var hello = "world";
所以這
for(var i = 0, len = keys.length; i < len; i++)
是相同的
var len = keys.length;
for(var i = 0; i < len; i++)
我喜歡完全避免.length並使用類似
var keys = /* array or nodelist */, key, i;
for(i = 0; key = keys[i]; i++)
一旦鍵解析為undefined,這將導致for循環結束。 現在您可以使用key
代替keys[i]
附帶說明一下,您的第二個示例將永遠無法工作,因為第一個for語句中定義的所有變量都將被第二個覆蓋,從而產生意外結果。 您可以嵌套for循環,但是必須使用不同的變量名。
正如Ankit在問題注釋中正確提到的那樣,它是一種簡寫。 而且,如果我是對的,則javascript在功能上是作用域范圍內的,而不是在塊作用域內,因此,您將覆蓋在外層for循環中聲明的len,而在內部中又將其聲明。
每次實例化時,在Javascript中這都是沉重的成本。 使用一個var和簡寫逗號創建多個變量效率更高。
您的示例僅使用一個var創建變量。
for (var i = 0, len = array2.length; i < len; i++) {
//loop
}
另一種方法是在循環外修改len變量。
var len = array2.length;
for (var i = 0; i < len; i++) {
//loop
}
現在,您有兩個單獨的“ var”實例。
我個人喜歡在開始時聲明var。
var len = array2.length,
i = 0;
for(i = 0; i < len; i++){
//First loop
}
//So if I use more than one for loop in a routine I can just reuse i
for(i = 0; i < 10; i++){
//Second loop
}
希望能幫助解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.