复合 let/const 赋值是啥意思?
Posted
技术标签:
【中文标题】复合 let/const 赋值是啥意思?【英文标题】:What does compound let/const assignment mean?复合 let/const 赋值是什么意思? 【发布时间】:2016-04-08 07:32:03 【问题描述】:在蓝鸟图书馆的wiki中有一篇文章Optimization killers。在这篇文章中有一句话:
目前无法优化: ... 包含复合 let 赋值的函数 包含复合 const 赋值的函数
复合 let 赋值和复合 const 赋值是什么意思? 在 ECMAScript 5.1 中有 compound assignment 的概念,但在 ECMAScript 2015 中,似乎没有任何复合赋值的概念,只有常规赋值。
我怀疑复合 let 和 const 赋值,它只是声明后的复合赋值。例如:
let n = 1;
n += 4;
我说的对吗?
【问题讨论】:
从复合的定义:“由两个或多个独立元素组成的东西;混合物。”由此看来,我认为let n = 1 + someval
是一个复合赋值,而let n = 1
不是?虽然不能绝对自信地说...
【参考方案1】:
是的,这似乎正是它的意思。我有以下代码(删除了无关的附加行):
function updatePlayer(player)
let direction = player.getDirection();
if (player.isPressingLeft())
direction += angleChange;
if (player.isPressingRight())
direction -= angleChange;
player.setDirection(direction);
updatePlayer
在 Chrome 的 Profiles 选项卡中生成了一个警告,Not optimization: Unsupported let complex assignment,所以我尝试了 l = l + r
而不是 l += r
并得到了显着的、持续的性能改进。
jsPerf shows that let
compound assignments are indeed extremely slow in Chrome 49.0.2623,与l = l + r
或var
相比!我想这将在未来的版本中得到解决,因为 Firefox、IE11 和 Edge 都没有受到影响,而且 Google 显然知道这个问题。
【讨论】:
这似乎是对的,但是什么是“复合const
赋值”,因为 const
声明不能重新赋值?
聚会迟到,但也可能意味着let x = 1, y = x;
而不是let x = 1; let y = x;
。只是猜测。
为什么这仍然会扼杀优化?我一直在--trace_opt --trace_deopt
看到这个。像“+=”这样的复合赋值语句太简单也太方便了。以上是关于复合 let/const 赋值是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章