Ответ 1

В принципе, var объявляет переменную, и вы также можете назначить ее одновременно.

Без var, присваивая переменной. Назначение будет либо назначать существующей переменной, либо создавать глобальную переменную этого имени, а затем назначать ей.

Вне функций это означает, что нет реальной разницы (в принципе), если переменная еще не существует. Обе создают глобальную переменную foo в этом случае.

Внутри функции существует огромная разница. Первая создает переменную локальную для функции независимо от того, существует она или нет в другом месте.

Вторая создаст глобальную переменную, если она не существует, или просто измените значение, если оно существует.

Чтобы код был как можно более модульным, вы всегда должны использовать var, если вы специально не хотите изменять существующие глобальные переменные. Это означает объявление всех глобальных переменных вне функций с помощью var и объявление всех локальных сетей с помощью var.

Ответ 2

foo = 1 поместит foo в последнюю область, где был определен foo, или глобальная область. var foo = 1 поместит переменную в текущую область действия (т.е. текущую функцию).

Ответ 3

В первом случае foo будет доступен в той же области, где он определен, то есть он будет локальной переменной. Во втором случае foo является глобальной переменной, расположенной в глобальной области.