Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разница между переменной с var и без, которые в глобальной области (https://javascript.ru/forum/misc/54356-raznica-mezhdu-peremennojj-s-var-i-bez-kotorye-v-globalnojj-oblasti.html)

nbq 14.03.2015 20:46

Цитата:

Сообщение от zhurchik
А если я хочу задать глобальную переменную из функции?

можешь написать window.a=...
а чтобы не писать каждый раз window, напиши вначале скрипта w=window

а внутри ф-ции w.a=...

Но пока не стоит с этим заморачиваться, вроде никаких проблем пока нет с этим. если будут, тогда и думать будем:)

Erolast 14.03.2015 21:17

Цитата:

Сообщение от nbq
а если "use strict" убрать?

use strict - это режим соответствия стандарту ES5. Неудачное название, да, очевидней бы было 'use ES5', но уж как есть.

Цитата:

Сообщение от nbq
можно пруф, где написано, что запрещено?

Цитата:

Сообщение от спецификация
When an assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable reference. If it does a ReferenceError exception is thrown upon assignment.

https://people.mozilla.org/~jorendor...ml#sec-11.13.1, примечание.

Цитата:

Сообщение от nbq
Разница в том, что перменную с var невозможно удалить

delete предназначен для удаления свойств, а не переменных
Цитата:

Сообщение от спефикация
When a delete operator occurs within strict mode code, a SyntaxError exception is thrown if its UnaryExpression is a direct reference to a variable, function argument, or function name.

https://people.mozilla.org/~jorendor...tml#sec-11.4.1, примечание.

Цитата:

Сообщение от nbq
обойти это легко, можно писать window.a=1

Да, так и надо делать. JS не кофе, он спроектирован так, чтобы синтаксис был четким, подробным и очевидным - это во-первых, во-вторых - код при возможности должен быть отвязан от скопа, для лучшей фрагментированости и переносимости.

Erolast 14.03.2015 21:18

Цитата:

чтобы не писать каждый раз window, напиши вначале скрипта w=window
Чтобы не писать каждый раз window, поставь себе редактор с автодополнением и сниппетами. Тот, кто будет читать этот код
w.one = 10;
w.second = 20;

ниуя не поймет, чо творится.

Erolast 14.03.2015 21:22

Цитата:

Но засирать глобал я бы вообще не рекомендовал.
...дополню:
http://www.2ality.com/2014/09/es6-modules-final.html
http://webpack.github.io/
http://browserify.org/
http://requirejs.org/

nbq 14.03.2015 21:27

Цитата:

Сообщение от Erolast
When an assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable reference. If it does a ReferenceError exception is thrown upon assignment.

Ну, как я и говорил, только в strict mode

Erolast 14.03.2015 21:32

Я же говорил уже, строгий режим - это режим соответствия стандарту ES5, существующий лишь для того, чтобы не поломать прежний код. Нет, если хочется говнокодить на ES3 - пожалуйста, но тогда зачем вообще в программисты лезть?

nbq 14.03.2015 21:35

Цитата:

Сообщение от Erolast
строгий режим - это режим соответствия стандарту ES5

То есть, когда он будет введен, use strict писать не надо? Все будет работать в strict mode по дефолту?

Erolast 14.03.2015 21:37

Цитата:

То есть, когда он будет введен, use strict писать не надо? Все будет работать в strict mode по дефолту?
ES5 введен уже как кучу лет, но из-за опасности поломки уже существующих сайтов сделать его семантику дефолтной нельзя, потому и придумали strict mode. В общем-то, это аналог смены мажорной версии.

nbq 14.03.2015 21:38

Цитата:

Сообщение от Erolast
говнокодить

>>говнокодить
Насчет говнокода я бы поспорил. Есть куча языков, где нет никаких варов, и прекрасно обходятся. Конкретно в JS он нужен для локальных переменных. Зачем его в глобальную область притянули -- вообще не понятно. Возможно, что-то связано с производительностью, либо, какие то скрытые дыры в дизайне.

Erolast 14.03.2015 21:53

Цитата:

Есть куча языков, где нет никаких варов, и прекрасно обходятся
Да, транслирующийся в JS coffeescript - тому пример. Но это другие языки, с другой архитектурой и в другом стиле, глупо накладывать их на JS.

Цитата:

Зачем его в глобальную область притянули -- вообще не понятно.
1. Внешний скоп далеко не всегда глобален.
2. Очевидно, для единого стиля.


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