Я неоднократно поднимал тут тему, по поводу того, зачем писать var в глобальной области, и ни разу не слышал адекватного объяснения. Сейчас я наконец сам нашел ответ. Это оптимизация. Просто переменные с var ложаться в отдельный скоп, и это позволяет сокращать время поиска, не проверяя весь глобал, переменные ищутся в первую очередь в этом скопе. По крайней мере это справедливо для ноды. Но вот ведь что забавно. Это работает только для примитивных значений, с объектами это не прокатывает, и даже, немного наоборот:
test = function(i, code, name){
console.time(name)
while(i--) code()
console.timeEnd(name)
}
i = 10000000
var a = 1
b=1
global.c = 1
var o1 = {c: 1}
o2 = {c: 1}
global.o3 = {c: 1}
test(i, function(){return a}, "a")
test(i, function(){return b}, "b")
test(i, function(){return c}, "c")
test(i, function(){return o1.c}, "o1.c")
test(i, function(){return o2.c}, "o2.c")
test(i, function(){return o3.c}, "o3.c")
//>>>> a: 22ms
//>>>> b: 131ms
//>>>> c: 116ms
//>>>> o1.c: 138ms
//>>>> o2.c: 117ms
//>>>> o3.c: 118ms