Я пытаюсь провести эксперимент, чтобы увидеть, хранятся ли локальные переменные в функциях в стеке.
Итак, я написал небольшой тест производительности
function test(fn, times){
    var i = times;
    var t = Date.now()
    while(i--){
        fn()
    }
    return Date.now() - t;
} 
ene
function straight(){
    var a = 1
    var b = 2
    var c = 3
    var d = 4
    var e = 5
    a = a * 5
    b = Math.pow(b, 10)
    c = Math.pow(c, 11)
    d = Math.pow(d, 12)
    e = Math.pow(e, 25)
}
function inversed(){
    var a = 1
    var b = 2
    var c = 3
    var d = 4
    var e = 5
    e = Math.pow(e, 25)
    d = Math.pow(d, 12)
    c = Math.pow(c, 11)
    b = Math.pow(b, 10)
    a = a * 5
}
Я ожидал, что функция обратной работы будет работать намного быстрее. Вместо этого появился удивительный результат.
Пока я не проверю одну из функций, она работает в 10 раз быстрее, чем после тестирования второго.
Пример:
> test(straight, 10000000)
30
> test(straight, 10000000)
32
> test(inversed, 10000000)
390
> test(straight, 10000000)
392
> test(inversed, 10000000)
390
Такое же поведение при тестировании в альтернативном порядке.
> test(inversed, 10000000)
25
> test(straight, 10000000)
392
> test(inversed, 10000000)
394
Я тестировал его как в браузере Chrome, так и в Node.js, и я не знаю, почему это произойдет. Эффект сохраняется до обновления текущей страницы или перезапуска Node REPL.
Что может быть источником таких значительных (в 12 раз хуже) производительности?
PS. Поскольку он работает только в некоторых средах, напишите среду, которую вы используете для ее проверки.
Мои были:
ОС: Ubuntu 14.04 
Node v0.10.37 
Chrome 43.0.2357.134 (Official Build) (64-разрядная версия)
/Edit 
В Firefox 39 для каждого теста требуется ~ 5500 мс независимо от порядка. Кажется, что это происходит только на определенных двигателях.
/Edit2 
Включение функции в тестовую функцию заставляет ее работать всегда в одно и то же время. 
Возможно ли, что существует оптимизация, которая строит параметр функции, если она всегда является одной и той же функцией?

