复合let / const赋值是什么意思?

时间:2016-01-04 16:19:27

标签: javascript bluebird compound-assignment

Bluebird图书馆的wiki中有一篇文章Optimization killers。在本文中有一个短语:

  

目前尚未优化:
  ...
  包含复合的函数允许赋值   包含复合const赋值的函数

复合赋值和复合const赋值是什么意思? 在ECMAScript 5.1中有compound assignment的概念,但在ECMAScript 2015中,似乎没有任何复合赋值的概念,只有常规赋值。

我怀疑复合let和const赋值,它只是声明后的复合赋值。例如:

let n = 1;
n += 4;

我是对的吗?

1 个答案:

答案 0 :(得分:15)

是的,这似乎正是它的意思。我有以下代码(删除了无关的附加行):

function updatePlayer(player) {
    let direction = player.getDirection();
    if (player.isPressingLeft()) {
        direction += angleChange;
    }
    if (player.isPressingRight()) {
        direction -= angleChange;
    }
    player.setDirection(direction);
}

updatePlayer在Chrome的个人资料标签中生成了一个警告,未优化:不支持让复合作业分配,所以我尝试= ... +代替{ {1}}并获得了显着,稳定的性能提升。

+=+ ... =相比,

jsPerf shows that let compound assignments are indeed extremely slow in Chrome 49.0.2623!我想这将在未来的版本中修复,因为Firefox和IE11以及Edge都没有受到影响,而且谷歌显然知道这个问题。