JavaScript中的“ let”和“ var”之间是否存在性能差异

尼古拉

这两个关键字在范围上的区别已经在这里进行了充分的讨论,但是我想知道两者之间是否存在任何性能差异,如果可以,那么可以忽略不计,或者在什么时候变得有意义?

乔伊特杰50

http://jsperf.com上对此进行测试之后,我得到了以下结果:jsperf已经停了一阵子了;请参阅下面的替换代码。

为了对此进行检查,我将基于此答案使用以下性能测试,这导致我编写了此功能:

/**
 * Finds the performance for a given function
 * function fn the function to be executed
 * int n the amount of times to repeat
 * return array [time for n iterations, average execution frequency (executions per second)]
 */
function getPerf(fn, n) {
  var t0, t1;
  t0 = performance.now();
  for (var i = 0; i < n; i++) {
    fn(i)
  }
  t1 = performance.now();
  return [parseFloat((t1 - t0).toFixed(3)), parseFloat((repeat * 1000 / (t1 - t0)).toFixed(3))];
}

var repeat = 100000000;
var msg = '';

//-------inside a scope------------
var letperf1 = getPerf(function(i) {
  if (true) {
    let a = i;
  }
}, repeat);
msg += '<code>let</code> inside an if() takes ' + letperf1[0] + ' ms for ' + repeat + ' iterations (' + letperf1[1] + ' per sec).<br>'

var varperf1 = getPerf(function(i) {
  if (true) {
    var a = i;
  }
}, repeat);
msg += '<code>var</code> inside an if() takes ' + varperf1[0] + ' ms for ' + repeat + ' iterations (' + varperf1[1] + ' per sec).<br>'

//-------outside a scope-----------

var letperf2 = getPerf(function(i) {
  if (true) {}
  let a = i;
}, repeat);
msg += '<code>let</code> outside an if() takes ' + letperf2[0] + ' ms for ' + repeat + ' iterations (' + letperf2[1] + ' per sec).<br>'

var varperf2 = getPerf(function(i) {
  if (true) {}
  var a = i;
}, repeat);
msg += '<code>var</code> outside an if() takes ' + varperf1[0] + ' ms for ' + repeat + ' iterations (' + varperf1[1] + ' per sec).<br>'

document.getElementById('out').innerHTML = msg
<output id="out" style="font-family: monospace;white-space: pre-wrap;"></output>

在Chrome和Firefox中进行测试后,这表明它let的速度比快var,但仅在与函数的主作用域不同的作用域内时才如此。在主要范围内,var并且let性能大致相同。在IE11和MS边缘,let并且var在这两种情况下的性能大致相等。

按下蓝色的大按钮,即可在您喜欢的浏览器中亲自查看。

目前let已经从只有较新的浏览器的支持,但旧的浏览器仍在使用比较多的,这将是一个理由,一般不使用它。如果您想在其他浏览器无法正常运行的地方使用它,则应该没有问题。

编辑:由于jsperf无法正常工作,因此修改了答案(请参阅旧版本的修订历史记录)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript中let和var之间的区别

来自分类Dev

平方函数和直接在Rust中调用powi(2)之间是否存在性能差异?

来自分类Dev

平方函数和直接在Rust中调用powi(2)之间是否存在性能差异?

来自分类Dev

在 Common Lisp 中,函数和宏之间是否存在性能差异?

来自分类Dev

Elasticsearch中的`ngram`过滤器和`ngram`标记生成器之间是否存在性能差异

来自分类Dev

JavaScript let 和 var 用法

来自分类Dev

NumericVector和vector <double>之间是否存在性能差异?

来自分类Dev

javascript 中的 var [{}] 和 var{} 与打字稿中的 let[{}] 和 let {} 有什么区别?

来自分类Dev

let vs var在nodejs和chrome中的性能

来自分类Dev

SQL Server中不存在和左联接之间的性能差异

来自分类Dev

在PHP中是否有等效于“ let”和“ var”的文件?

来自分类Dev

int和仅包含int的结构之间是否存在性能差异?

来自分类Dev

在使用angular $ filter和带有Filter后缀的名称之间是否存在性能差异?

来自分类Dev

在这种情况下,子文档和全局文档之间是否存在性能差异?

来自分类Dev

使用Virtual Box的VMDK和VDI虚拟磁盘格式之间是否存在性能差异?

来自分类Dev

介于“喜欢”和“喜欢%”之间是否确实存在性能差异?

来自分类Dev

通过icc或gcc编译和链接mkl库之间是否存在性能差异?

来自分类Dev

强制转换为 void* 和基本结构指针之间是否存在性能差异?

来自分类Dev

C#和Javascript之间的性能和内存差异?

来自分类Dev

HL7 ORU消息中的ORC和OBR公用元素之间是否存在差异?

来自分类Dev

在Rails 5中,“ model.save”和“ model.errors.empty”之间是否存在功能差异?

来自分类Dev

Perl中while(每个)和foreach之间的性能差异

来自分类Dev

Android中query()和rawQuery()方法之间的性能差异

来自分类Dev

?? 之间的性能差异 和 ==

来自分类Dev

Swift中的类中的可选let和可选var

来自分类Dev

之间存在性能差异?和.where.present?

来自分类Dev

var和Typescript中的let有什么区别?

来自分类Dev

“ let”和“ var”在打字稿中是相同的吗?

来自分类Dev

如何解释结果(理解js中的let和var)

Related 相关文章

  1. 1

    JavaScript中let和var之间的区别

  2. 2

    平方函数和直接在Rust中调用powi(2)之间是否存在性能差异?

  3. 3

    平方函数和直接在Rust中调用powi(2)之间是否存在性能差异?

  4. 4

    在 Common Lisp 中,函数和宏之间是否存在性能差异?

  5. 5

    Elasticsearch中的`ngram`过滤器和`ngram`标记生成器之间是否存在性能差异

  6. 6

    JavaScript let 和 var 用法

  7. 7

    NumericVector和vector <double>之间是否存在性能差异?

  8. 8

    javascript 中的 var [{}] 和 var{} 与打字稿中的 let[{}] 和 let {} 有什么区别?

  9. 9

    let vs var在nodejs和chrome中的性能

  10. 10

    SQL Server中不存在和左联接之间的性能差异

  11. 11

    在PHP中是否有等效于“ let”和“ var”的文件?

  12. 12

    int和仅包含int的结构之间是否存在性能差异?

  13. 13

    在使用angular $ filter和带有Filter后缀的名称之间是否存在性能差异?

  14. 14

    在这种情况下,子文档和全局文档之间是否存在性能差异?

  15. 15

    使用Virtual Box的VMDK和VDI虚拟磁盘格式之间是否存在性能差异?

  16. 16

    介于“喜欢”和“喜欢%”之间是否确实存在性能差异?

  17. 17

    通过icc或gcc编译和链接mkl库之间是否存在性能差异?

  18. 18

    强制转换为 void* 和基本结构指针之间是否存在性能差异?

  19. 19

    C#和Javascript之间的性能和内存差异?

  20. 20

    HL7 ORU消息中的ORC和OBR公用元素之间是否存在差异?

  21. 21

    在Rails 5中,“ model.save”和“ model.errors.empty”之间是否存在功能差异?

  22. 22

    Perl中while(每个)和foreach之间的性能差异

  23. 23

    Android中query()和rawQuery()方法之间的性能差异

  24. 24

    ?? 之间的性能差异 和 ==

  25. 25

    Swift中的类中的可选let和可选var

  26. 26

    之间存在性能差异?和.where.present?

  27. 27

    var和Typescript中的let有什么区别?

  28. 28

    “ let”和“ var”在打字稿中是相同的吗?

  29. 29

    如何解释结果(理解js中的let和var)

热门标签

归档