Не смотря на то, что тема работы var/let/const для меня закрыта, и теперь за меня будут говорить инженеры v8, я анонсирую новый ахуху кейс при использовании let. Который всех снова поставит на рога.
Я сам его только что случайно открыл. Но я Вам его не покажу, потому, что у вас документов нету.
Все, в том числе и я, как остолопы тестировали издержки связанные с ThrowReferenceErrorIfHole, и никто не додумался посмотреть на то, как этот Hole инициализируется. А там, издержек в два раза больше
Кому нечем заняться - попробуйте угадать где проблема.
Вот код для теста.
function doAdd1( a, b ) {
var theThing = 1;
let theSummator = 0;
function doSum() {
for ( var i = 0; i < 10000; i++ ) {
theSummator += theThing + i;
}
}
doSum();
return theSummator;
}