选项-1
for(var i = 0, l = arr.length; i < l; i++ ){
sum += arr[i];
}
选项-2
var i;
var l = arr.length;
for(i = 0; i < l; i++ ){
sum += arr[i];
}
这只是一种风格偏好还是有最好的做法?
答案 0 :(得分:1)
使用var
,这是一个样式问题。
但是从ES2015(又名&#34; ES6&#34;)开始,如果你使用let
和const
,JavaScript会获得变量的块范围。所以
for (let i = 0, l = arr.length; i < l; i++ ){
sum += arr[i];
}
VS。
let i;
let l = arr.length;
for(i = 0; i < l; i++ ){
sum += arr[i];
}
不纯粹是一种风格问题。有两件事需要考虑:
第一个,当然,i
和l
的范围是for
循环(虽然可能不是你想象的那样),而第二个是&# 39;在包含for
循环的范围内。
对于第一个,每次循环迭代(确实)都有一个 new i
和l
,这会对性能产生影响;对于第二个,所有循环迭代(以及包含范围)只共享一个i
和l
。
#2对您在循环中创建的任何函数产生重大影响,正如您在此示例中所看到的那样:
for (let i = 0; i < 3; ++i) {
setTimeout(() => {
console.log("let inside the loop, i = " + i);
}, 0);
}
let j;
for (j = 0; j < 3; ++j) {
setTimeout(() => {
console.log("let outside the loop, j = " + j);
}, 0);
}
&#13;
在兼容ES2015的浏览器上输出:
let inside the loop, i = 0 let inside the loop, i = 1 let inside the loop, i = 2 let outside the loop, j = 3 let outside the loop, j = 3 let outside the loop, j = 3
注意i
的值0
到2
的值,但j
的值始终是3
(就像var
一样i
1}})。这是因为每次循环迭代都有不同的 j
变量,但是所有循环迭代只共享一个let
变量。
注意: IE9-IE11有3
,但不符合ES2015标准。如果您在其中运行上述内容,则会i
以及j
看到notes = {'ban': 'BAN: is the account number, Other relative information, More information'}
。