为什么在循环外声明变量更快?
Why is declaring a variable outside of the loop more faster?
几周前,我听说在循环外声明 true
/false
条件变量更快。所以,我想试试看。
所以,基本上,我编写这段代码是为了看看哪个更快。
这是两个循环。
// Initialization
const arr = [1, 2, 3, 4, 5];
// Bad Loop
console.time("bad");
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
console.timeEnd("bad");
// Good Loop
console.time("good");
let l = arr.length;
for (let i = 0; i < l; i++) {
console.log(arr[i]);
}
console.timeEnd("good");
当代码为 运行 时,运行 坏循环所花费的时间与好循环所花费的时间存在显着差异。 (无论坏循环有多快,好循环总是更快。)
所以,我的问题是 为什么会这样?两个循环之间的唯一区别是好的循环在循环开始之前定义数组长度,而坏循环在循环中获取它。
基本上,这就是为什么坏循环中的代码比好循环慢的原因。
1.坏循环为什么慢?
首先,让我们看一下坏循环。
const arr = [1, 2, 3, 4, 5];
console.time("Bad");
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
console.timeEnd("Bad");
使这个循环变慢的原因是它 每次迭代都访问 length
属性 .
这会大大降低性能,因为五次(在这种情况下),它必须访问 属性。
如您所见,坏循环变慢也就不足为奇了。
2。为什么好的循环这么快?
看看好的循环:
const arr = [1, 2, 3, 4, 5];
console.time("Good");
let l = arr.length;
for (let i = 0; i < l; i++) {
console.log(arr[i]);
}
console.timeEnd("Good");
您可以看到它更快的原因是因为它在循环 之外访问length
。换句话说,它只访问了 length
一次,而错误的代码访问了它五次。
您可以看到,通过定义变量,它减少了从远处获取 length
属性 所花费的时间,从而提高了性能!
总之,好的循环更快,因为它只需要访问 length
属性 一次!
几周前,我听说在循环外声明 true
/false
条件变量更快。所以,我想试试看。
所以,基本上,我编写这段代码是为了看看哪个更快。
这是两个循环。
// Initialization
const arr = [1, 2, 3, 4, 5];
// Bad Loop
console.time("bad");
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
console.timeEnd("bad");
// Good Loop
console.time("good");
let l = arr.length;
for (let i = 0; i < l; i++) {
console.log(arr[i]);
}
console.timeEnd("good");
当代码为 运行 时,运行 坏循环所花费的时间与好循环所花费的时间存在显着差异。 (无论坏循环有多快,好循环总是更快。)
所以,我的问题是 为什么会这样?两个循环之间的唯一区别是好的循环在循环开始之前定义数组长度,而坏循环在循环中获取它。
基本上,这就是为什么坏循环中的代码比好循环慢的原因。
1.坏循环为什么慢?
首先,让我们看一下坏循环。
const arr = [1, 2, 3, 4, 5];
console.time("Bad");
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
console.timeEnd("Bad");
使这个循环变慢的原因是它 每次迭代都访问 length
属性 .
这会大大降低性能,因为五次(在这种情况下),它必须访问 属性。
如您所见,坏循环变慢也就不足为奇了。
2。为什么好的循环这么快?
看看好的循环:
const arr = [1, 2, 3, 4, 5];
console.time("Good");
let l = arr.length;
for (let i = 0; i < l; i++) {
console.log(arr[i]);
}
console.timeEnd("Good");
您可以看到它更快的原因是因为它在循环 之外访问length
。换句话说,它只访问了 length
一次,而错误的代码访问了它五次。
您可以看到,通过定义变量,它减少了从远处获取 length
属性 所花费的时间,从而提高了性能!
总之,好的循环更快,因为它只需要访问 length
属性 一次!