Работа с переменными в цикле

Когда идет использование промежуточной переменной в цикле, то лучше вынести ее объявление за массив, чтобы на каждой итерации не объявлять ее, или лучше в массиве объявление сделать?

var step;
for(int i = 0; i < array.length; i++){
   step = ...
   array[i] += step;
}

Я всегда вношу переменную в цикл.

Исхожу из идеи что переменные должны быть объявлены как можно ближе к тому месту где используются.

Есть нюансы, что переменная, объявленная в цикле с помощью var будет продолжать существовать в лексической области видимости (т.е. внутри функции) даже после завершения цикла. Некоторые линтеры ругаются на такие переменные. На практике они никогда не приносили проблем (разве что только в коде абсолютных новичков).

Вторая вещь - если ты не пишешь под старые браузеры (ie9) или пользуешься транспайлером, то можно пользоваться let и const, семантика которых ограничивает область видимости переменных блоками кода. Т.е. переменная объявленная с помощью let и const будет доступна только в цикле, блоке ветвления итд. let используется для переменных, значения которых будут “затираться”, const - переменные значения которых не будут перетираться.

Итого:

for (let i = 0; i < array.length; i++) {
	const step = i * i;
	array[i] += step;
}
1 симпатия