Использование итеративного стиля для клонирования объекта в JavaScript

Можно ли переписать следующую рекурсивную функцию JavaScript, чтобы сделать ее быстрее?

function clone_recursive(object) {
    var result = {};
    for (var key in object) {
        var value = object[key];
        if (typeof value === 'object') {
            result[key] = clone_recursive(value);
        } else {
            result[key] = value;
        }
    }
    return result;
}

Я переписал ее в итеративном стиле, но это не увеличивает производительность, на самом деле скорость упала на ≈20%.

function clone_iterative(object) {
    var result = {};
    var queue = [{base: result, value: object}];
    var item;
    while (item = queue.shift()) {
        var current = item.value;
        var base = item.base;
        for (var key in current) {
            var value = current[key];
            if (typeof value === 'object') {
                var resultValue = base[key] = {};
                queue.push({base: resultValue, value: value});
            } else {
                base[key] = value;
            }
        }
    }
    return result;
}

http://jsperf.com/clone-an-object/13

13
задан NVI 3 December 2011 в 19:51
поделиться