Отличается ли const, let и var в плане производительности и памяти в js?
Изучаю js, и назрел вопрос отличается ли const от var и let в плане производительности и памяти которую занимают переменные? Вопрос может показаться глупым, но информации по нему я не нашел.
Ответы (3 шт):
На производительность и память, скорее, влияет контекст в которых переменные существуют, а также область их видимости. Однако, из-за поведения 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. Но большинство программистов не умеют пользоваться этим осознано.