Кэширование ресурсоемких вызовов

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

Также стоит с осторожностью использовать ключевое слово 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;
})();

В этом примере мы уменьшили число обращений к глобальной переменной и устранили расчет размера массива на каждой итерации цикла.