javascript

tgabmvqs  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(218)

在javascript中,在循环中声明一个带有“let”的变量时,我很难找到有关性能影响的信息。如果我这样做的话,我已经找到了很多关于所述变量范围的信息,但没有发现性能影响或缺乏这些信息。
例如,在下面的代码(二进制搜索算法)中,我在while循环中声明了中点变量。

const binarySearch = (arr, num) => {
  if(arr.length === 0) return false;
  if(arr.length === 1) return arr[0] === num;
  let left = 0;
  let right = arr.length - 1;
  while (left < arr.length && right >= 0){
    let midpoint = Math.floor((right + left) / 2);
    if(arr[midpoint] === num) return true;
    if(arr[midpoint] < num) left = midpoint + 1;
    else right = midpoint - 1;
  }
  return false;
}

我的理解是,这将中点的范围限制在while循环本身,我理解这一点,在本例中这很好。
我发现有信息说,如果我使用“var”来声明中点,而不是“let”,那么在循环内部或外部声明中点的性能将无关紧要,因为“var”是自动提升的。同样,这是有道理的,我相信我理解。
但是我找不到关于在循环中用“let”声明中点是否会对性能产生负面影响的信息。
这是否会在每个循环的内存中创建一个新的变量,从而比我首先在循环外用“let”声明中点,然后用每个循环更新其值时占用更多内存?请参见下面的示例:

const binarySearch = (arr, num) => {
  if(arr.length === 0) return false;
  if(arr.length === 1) return arr[0] === num;
  let left = 0;
  let right = arr.length - 1;
  let midpoint;
  while (left < arr.length && right >= 0){
    midpoint = Math.floor((right + left) / 2);
    if(arr[midpoint] === num) return true;
    if(arr[midpoint] < num) left = midpoint + 1;
    else right = midpoint - 1;
  }
  return false;
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题