在循环内还是循环外声明变量/常量?

时间:2018-11-22 08:36:27

标签: javascript arrays algorithm

哪种策略会更好?

// Creating the constant OUTSIDE the loop.
const expected = "Some String";

let expectedFound = result.some((element) => {
  return element.textContent === expected;
});


// Creating the constant WITHIN the loop.
let expectedFound = result.some((element) => {
  const expected = "Some String";

  return element.textContent === expected;
});

通常,有人说应该声明变量尽可能接近其实际用法。但是我不确定所显示的情况。

一次只创建常数会更好吗? 当数组很大时,它不能(理论上)引起创建大量变量的问题吗?

2 个答案:

答案 0 :(得分:1)

以您的示例为例,在some函数内部创建变量实际上并不是在循环内部创建变量,因为在退出函数时它将被删除(因此,在每个“迭代”末尾)。 / p>

我将在some函数中进行声明。

答案 1 :(得分:1)

从技术上讲,这不是循环,即使其结构和功能相似。 JavaScript中的循环为forfor ... infor ... ofwhile。这些语句的主体是一个。例如:

const expected = "Some String";
let i = 0, expectedFound = false;
while(i < result.length) {
    if(result[i].textContent === expected) {
        expectedFound = true;
        break;
    }
    i = i + 1;
}

具有与some方法类似的功能。

some是一个 Array方法,该方法通过了回调函数。这有各种差异,但我不确定它们在这种特定情况下如何发挥作用。例如,在块内声明一个变量可能对性能非常不利,但是我不确定它将如何影响Array方法回调函数的情况。

根据经验,我想说的是,如果您想通过JavaScript压缩性能,那么使用优化循环可能会比使用Array方法更好。但这是一个非常重要的如果。除非我们要讨论超过一百个HTML元素,或者每秒要运行几次此代码,否则我认为优化它不是优先事项。

我发现了一些与此有关的内容:https://hackernoon.com/javascript-performance-test-for-vs-for-each-vs-map-reduce-filter-find-32c1113f19d7