Отличается ли const, let и var в плане производительности и памяти в js?

Изучаю js, и назрел вопрос отличается ли const от var и let в плане производительности и памяти которую занимают переменные? Вопрос может показаться глупым, но информации по нему я не нашел.


Ответы (3 шт):

Автор решения: Leonid

На производительность и память, скорее, влияет контекст в которых переменные существуют, а также область их видимости. Однако, из-за поведения var как раз в плане области видимости, она будет потреблять больше ресурсов на единицу времени.


Всем, кто не может обойтись без родной var: ПОЛЬЗУЙТЕСЬ НА ЗДОРОВЬЕ. Она такая же как и let/const. Главное, чтобы эти переменные сидели в функциях, а не захламляли глобальное пространство. Об этом надо беспокоиться. В плане быстродействия все одинаковы. Но var, согласитесь, имеет побочные эффекты. Вы, конечно, можете использовать i1, i2, i3 в блоках одного уровня, но может не стоит?

console.log(i); // i в этот момент времени существует, но не инициализирована
//console.log(j);  j в этот момент времени не существует

if(1){
    var i = 10;
    let j = 10; // j вообще существует только в этот момент времени!!!!!!!
}

// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.
// i в этот момент времени существует. j - нет.

console.log(i); // i в этот момент времени существует
//console.log(j);  j в этот момент времени не существует

Попробуй подождать, когда там удалится значение i!

if(1){
var i = 555555555555555555555555555555;
let j = 555555555555555555555555555555;
}

let select = document.getElementById('memorydetector');

select.onchange = function(){

if(this.value != '0') document.getElementById('result').textContent = window[this.value];
}
#memorydetector {
padding: 4px;
}

#result {
 min-height: 20px;
 width: 300px;
 padding: 10px;
 font-size: 20px;
}
<select id="memorydetector">
<option value="0">no var</option>
<option value="i">i</option>
<option value="j">j</option>
</select>

<div id="result">
  
</div>

→ Ссылка
Автор решения: Август

при всплытии (хостинге) переменных над varпроисходит немного больше процессов, а именно её инициализация - присвоение значения undefined а так же присвоение типа undefined, в то время как let и const остаются неинициализированными. в данном случае нагрузка идет на построение синтаксического дерева, но она вообще незначительная

→ Ссылка
Автор решения: Дмитрий Краснов

В общем случае, let и const уступают var в производительности т.к. интерпретатор навешивает на каждый let и const дополнительную логику для обеспечения TDZ (Temporal Dead Zone - временная мертвая зона).

Временная мёртвая зона (Temporal Dead Zone, TDZ) - зона, простирающаяся от входа в область видимости до объявления переменной или константы. При обращении к переменной или константе в этой зоне выдается ошибка.

Кроме того, const дополнительно обвешивается логикой обеспечения иммутабельности ссылки или значения. Однако, существуют ситуации, в которых внутренние оптимизации интерпретатора повышают производительность const. Но большинство программистов не умеют пользоваться этим осознано.

→ Ссылка