Как показывает практика, лучше всего будет использовать переменные максимально близко к области их объявления и избегать использования глобальных переменных любой ценой. Глобальная область видимости обычно содержит десятки, если не сотни объектов, которые добавлены браузером согласно спецификации и для собственных нужд, поэтому обращения к глобальным переменным всегда ресурсоемки.
Также стоит с осторожностью использовать ключевое слово with
, так как оно не дает компилятору генерировать код для быстрого доступа к локальным переменным (ему приходится сначала пробежаться по цепочке прототипа объекта, затем по цепочке вышестоящей области видимости и т. д.).
Если у вас есть примерно такой участок кода:
var arr = ...; var globalVar = 0; (function () { var i; for (i = 0; i < arr.length; i++) { globalVar++; } })();
то его можно оптимизировать следующим образом:
var arr = ...; var globalVar = 0; (function () { var i, l, localVar; l = arr.length; localVar = globalVar; for (i = 0; i < l; i++) { localVar++; } globalVar = localVar; })();
В этом примере мы уменьшили число обращений к глобальной переменной и устранили расчет размера массива на каждой итерации цикла.