24

Bluebird 库的 wiki 中有一篇文章优化杀手。在这篇文章中有一句话:

当前不可优化:
...
包含复合 let 赋值
的函数 包含复合 const 赋值的函数

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

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

let n = 1;
n += 4;

我对吗?

4

1 回答 1

15

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

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

updatePlayer在 Chrome 的“配置文件”选项卡中生成了一个警告,未优化:不支持让复合分配,因此我尝试并获得了显着的、一致的性能改进。l += rl = l + r

jsPerf 表明letl = l + r,与or相比,复合赋值在Chrome 49.0.2623中确实非常慢var!我想这将在未来的版本中得到解决,因为 Firefox、IE11 和 Edge 都没有受到影响,而且谷歌显然知道这个问题。

于 2016-03-28T00:57:02.933 回答