在我的Javascript参考书中,for循环以下列方式进行优化:
for( var i = 0, len = keys.length; i < len; i + +) { BODY }
显然,执行“len = keys.length”会阻止计算机每次通过for循环时重新计算keys.length。
我不明白为什么这本书不写“var len = keys.length”而不是“len = keys.length”?是不是这本书使“len”成为一个全局变量,如果你试图嵌套两个循环遍历两个数组的for循环,这不好?
E.g。
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 Locations 6992-6998)。奥莱利媒体。 Kindle版。
答案 0 :(得分:1)
您可以像这样链接变量声明
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++)
一旦键解析为未定义,这将导致for循环结束。
现在,您可以使用key
代替keys[i]
作为旁注,您的第二个示例将永远不会起作用,因为第一个for语句中定义的所有变量都将被第二个覆盖,从而产生意外结果。您可以嵌套for循环,但必须使用不同的变量名称。
答案 1 :(得分:0)
AS Ankit在问题的评论中正确提到,它是一种速记。而且,如果我是正确的,javascript是功能范围的,而不是块作用域,所以你覆盖外部for循环中声明的len,同时在内部重新声明它。
答案 2 :(得分:-1)
在Javascript中,每次实例化它都是一笔沉重的代价。使用一个var和short hand逗号来创建多个变量会更有效。
您的示例仅使用一个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
}
希望有助于解释。