Показать сообщение отдельно
  #37 (permalink)  
Старый 31.03.2015, 20:57
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от theKingOfJava
При вызове check создается.
При вызове чего?
Если ты совсем не разбираешься в JS то могу подсказать =)
var SelfModifyObserver = function(){
    var stack = [];
    this.add = function(server){
        stack.push(server);
        var code = 'return {';
        for(var i = 0, ln = stack.length; i < ln; i++){
            code += stack[i].name + ':' + 'stack[' + i + '].ping(),';
        }
        code += '};';
        this.check = eval('(function(){' + code +'});');
        return this;
    };
    this.check = function(){return {};}
};
при вызове метода .add создается новая функция в которой вместо косвенного обращения подставляется реальное значение т.е. вместо stack[i].name в тело функции вставляется значение которое хранится по этому адресу/пути
после этого в цикле просто вызывается функция instance.check();
Функции стала значительно эффективнее за счет статичных значений т.е. из нее просто убирается итерация массива и косвенная адресация.

минихоливарчик начался после твоей попытки опровергнуть утверждение что -"чем код статичнее, тем он быстрее"
и при этом привел пример где оптимизация достигается за счет подставленний статичных значений вместо косвенной адресации.
Ответить с цитированием