Начал тут разбираться с js, и обнаружил на разных бложеках уйму холливаров по поводу использования var.
Как известно, в js считается плохим тоном не использовать var везде, в том числе и в глобальной области. Только вот почему ее там (в глобальной) надо использовать, похоже мало кто знает, мож скрывают, хз.
То, что переменная объявленная без var не имеет (скрытого) св-тва DontDelete, и (похоже) переменная c var (конкретно в ноде) не копируется в глобальный объект - это ситуацию до конца не проясняет, потому что остается вопрос, если это все не имеет значения для конкретного кода, почему бы не забить.
Я поковырялся с этим вопросом, и вот что выяснил.
Оказывается, в ноде можно подключать модули не только стандартным require, но и простым eval-read. Вот тут, как раз-таки, и проявляется настоящая причина. Если мы «подключим» наш «модуль» внутри ф-ции, то пер-нные из «модуля» без вар сразу бухаются в глобальный скоп.
Допустим, у нас два файла: основной и модуль.
модуль(пусть будет tst):
a=1
var b=2;
read=function(file){return require("fs").readFileSync(file, "ascii")}
tst=function(){eval(read("./tst")); console.log(a, b)};
tst()// 1 2
console.log(global.a, global.b)// 1 undefined