在Bluebird图书馆的wiki中有一篇文章优化杀手.在本文中有一个短语:
目前不可优化:
...
包含复合的
函数let赋值包含复合const赋值的函数
复合赋值和复合const赋值是什么意思?在ECMAScript 5.1中有复合赋值的概念,但在ECMAScript 2015中,似乎没有任何复合赋值的概念,只有常规赋值.
我怀疑复合let和const赋值,它只是声明后的复合赋值.例如:
let n = 1; n += 4;
我对吗?
是的,这似乎正是它的意思.我有以下代码(删除了无关的附加行):
function updatePlayer(player) { let direction = player.getDirection(); if (player.isPressingLeft()) { direction += angleChange; } if (player.isPressingRight()) { direction -= angleChange; } player.setDirection(direction); }
updatePlayer
在Chrome的" 个人档案"标签中生成了一个警告,未优化:不支持让复合分配,所以我尝试了而不是获得了显着,一致的性能提升.= ... +
+=
jsPerf表明Chrome 49.0.2623中的let
复合赋值确实非常慢,与+ ... =
or 相比var
!我想这将在未来的版本中修复,因为Firefox和IE11以及Edge都没有受到影响,而且谷歌显然知道这个问题.