Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не следует использовать var в global (https://javascript.ru/forum/misc/48268-pochemu-ne-sleduet-ispolzovat-var-v-global.html)

foo 27.06.2014 10:57

Почему не следует использовать var в global
 
Наверное, многие думают, что объявленная в global переменная с var отличается от той что без var только тем, что имеет скрытое св-во dontdelete. Я выяснил, что в node, помимо этого, она не копируется в global. Возможно, еще где-нибудь. Это значит, к примеру, что она не будет доступна через конструкцию for(i in global). Поэтому, в общем случае, не стоит объявлять через вар в глобальной области. Объявляя без вар мы ничего не теряем. Но не наоборот. Так что это тупой базворд, не надо слушать этих умников от CS.

Octane 27.06.2014 11:20

Стоит различать свойства глобального объекта и глобальные переменные.
Почитай, например http://dmitrysoshnikov.com/ecmascrip...riable-object/
Отличие не только в dontdelete

var Object; //глобальная функция
alert(typeof Object); //по прежнему доступен


var postMessage; //свойство объекта window
alert(typeof postMessage) //теперь до postMessage можно достучаться
                         // только с помощью window.postMessage

Erolast 27.06.2014 11:36

В соседней теме на то же тебе же отвечал, процитирую:
Цитата:

Сообщение от Erolast (Сообщение 318204)
Это пережиток былого. В современном javascript при объявлении переменных ВСЕГДА нужно использовать var (ну либо const/let). Попробуй объявить без var в строгом режиме - и интерпретатор радостно выдаст ошибку.
"use strict";

try {
  somevar = 100;
} 
catch (e) {
  alert(e);
}


В node.js область видимости текущего скрипта не равна глобальной области видимости. Каждый модуль создает свою область видимости. Потому объявленная через var переменная не становится глобальной, да.


foo 27.06.2014 11:50

Цитата:

Сообщение от Erolast (Сообщение 318205)
В соседней теме на то же тебе же отвечал, процитирую:

Я в соседней теме тебе ответил, добавлю только, что про область видимости модулей я не говорил, че ты их приплетаешь сюда, я хз

foo 27.06.2014 11:58

Цитата:

Сообщение от Octane
по прежнему доступен

А что он из себя представляет? В node он undefined. А у Вас что?

Octane 27.06.2014 12:01

Object undefined?

foo 27.06.2014 12:04

Цитата:

Сообщение от Octane
по прежнему доступен

попробовал в Firefox вот так:
Object=1
console.log(typeof Object)// number

foo 27.06.2014 12:04

Цитата:

Сообщение от Octane (Сообщение 318214)
Object undefined?

Да

foo 27.06.2014 12:08

Цитата:

Сообщение от Octane (Сообщение 318214)
Object undefined?

Да, в firefox и в node, если
var Object=1;
console.log(typeof Object)//number

так, то что с var, что без, number

Erolast 27.06.2014 12:11

Цитата:

Я в соседней теме тебе ответил
Процитирую ту часть моего ответа на твой ответ, что как раз в тему этой темы:
Цитата:

Цитата:

Мне плевать на него [strict mode]
То есть, ты признаешь ранние стандарты, а на современные тебе плевать?) Ну-ну, продолжай в том же духе.


Часовой пояс GMT +3, время: 06:37.