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)

nverv 27.06.2014 15:53

Цитата:

Сообщение от Erolast (Сообщение 318294)
Ты путаешь. Это свойства, а не переменные. Свойства, разумеется, объявлять не надо.

я не путаю

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

ну какой же есть смысл использования var в глобале если тот же самый эфект и даже лучше достигается методом добавьСвойство

Erolast 27.06.2014 15:59

Ты, чтоли, об этом? Ну можно и методом defineProperty(window, value). Можно и через window.value. Технически разницы нету. Но мне почему-то кажется, что так не проще)

kobezzza 27.06.2014 15:59

nverv, чувак, никто тебе не запрещает писать

this.foo = ...


Более того это типичный пример "портируемого" кода для разных окружений, т.к.:

браузер - глобальный объект
поток - глобальный объект
node - exports

***

Плохо когда пишут:

foo =


т.к. такое поведение было убрано из стандарта - хорошо это или плохо другой вопрос, но на мой взгляд они сделали всё правильно, т.к. подход к переменным в JS изначально был неверный и в ECMAScript6 это исправили (добавили let и const).

Кого раздражает синтаксическая многословность, то посмотрите в сторону CoffeeScript и прочих транслируемых в JS языков.

***

В новый стандарт JS добавили нативные модули, и при их использовании var будет добавлять не в global space, а в контекст модуля (как в ноде) и тут уже очевидная разница.

JS эволюционирует, т.к. меняются его задачи и сферы применения, так например появятся типы, структуры, уже появились "настоящие" массивы и возможность ручного управления памятью и ещё куча всего. От того, что кому то кажется сложным мир не изменится и это сугубо твои проблемы. Не хочешь учиться - иди работать в макдональдс.

nverv 27.06.2014 16:04

Цитата:

Сообщение от Erolast (Сообщение 318304)
Ты, чтоли, об этом? Ну можно и методом defineProperty(window, value). Можно и через window.value. Технически разницы нету. Но мне почему-то кажется, что так не проще)

но же "строгий режим" запрещает так писать -
window.value = 1

вопрос- наплевать ли мне на этот запрет и жить удобнее, или с самого начала приучиться использовать defineProperty ?

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

Erolast 27.06.2014 16:05

Цитата:

но же "строгий режим" запрещает так писать -
window.value = 1
С чего бы вдруг? Не запрещает.

kobezzza 27.06.2014 16:06

Цитата:

но же "строгий режим" запрещает так писать -
window.value = 1
Ты путаешь, так писать можно - это нормальное поведение.

Нельзя писать

Цитата:

value = 1

foo 27.06.2014 16:35

Цитата:

Сообщение от kobezzza
Не хочешь учиться - иди работать в макдональдс.

Строго наоборот. Хомячье не понимает программирования, поэтому ему нужен сахар. Инженер превращается в секретаршу с интерфейсом, но зато их теперь много, и можно клепать энтерпрайз.

Erolast 27.06.2014 16:36

Да вот кто б говорил...

nverv 27.06.2014 16:46

Цитата:

Сообщение от kobezzza (Сообщение 318313)
Ты путаешь, так писать можно - это нормальное поведение.

а читая фленагана я понял что нельзя так

"
все переменные должны объявляться... стр 134


или тут речь только о локальных переменных создаваемых var

kobezzza 27.06.2014 16:49

nverv, ты просто не правильно понял, если ты явно пишешь кому ты ставишь свойство - то юзай на здоровье.

Плохо когда юзают такие штуки
a = 2 // неявная декларация global.a = 2

function bar() {
  b = 3 // неявная декларация global.b = 3
}

foo // неявная декларация document.getElementById('foo')


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