14.03.2015, 20:46
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Сообщение от zhurchik
|
А если я хочу задать глобальную переменную из функции?
|
можешь написать window.a=...
а чтобы не писать каждый раз window, напиши вначале скрипта w=window
а внутри ф-ции w.a=...
Но пока не стоит с этим заморачиваться, вроде никаких проблем пока нет с этим. если будут, тогда и думать будем
|
|
14.03.2015, 21:17
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Сообщение от 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 не кофе, он спроектирован так, чтобы синтаксис был четким, подробным и очевидным - это во-первых, во-вторых - код при возможности должен быть отвязан от скопа, для лучшей фрагментированости и переносимости.
|
|
14.03.2015, 21:18
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
чтобы не писать каждый раз window, напиши вначале скрипта w=window
|
Чтобы не писать каждый раз window, поставь себе редактор с автодополнением и сниппетами. Тот, кто будет читать этот код
w.one = 10;
w.second = 20;
ниуя не поймет, чо творится.
|
|
14.03.2015, 21:22
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
|
|
14.03.2015, 21:27
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Сообщение от 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
|
|
14.03.2015, 21:32
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Я же говорил уже, строгий режим - это режим соответствия стандарту ES5, существующий лишь для того, чтобы не поломать прежний код. Нет, если хочется говнокодить на ES3 - пожалуйста, но тогда зачем вообще в программисты лезть?
|
|
14.03.2015, 21:35
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Сообщение от Erolast
|
строгий режим - это режим соответствия стандарту ES5
|
То есть, когда он будет введен, use strict писать не надо? Все будет работать в strict mode по дефолту?
|
|
14.03.2015, 21:37
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
То есть, когда он будет введен, use strict писать не надо? Все будет работать в strict mode по дефолту?
|
ES5 введен уже как кучу лет, но из-за опасности поломки уже существующих сайтов сделать его семантику дефолтной нельзя, потому и придумали strict mode. В общем-то, это аналог смены мажорной версии.
Последний раз редактировалось Erolast, 15.03.2015 в 08:11.
|
|
14.03.2015, 21:38
|
Интересующийся
|
|
Регистрация: 14.03.2015
Сообщений: 10
|
|
Сообщение от Erolast
|
говнокодить
|
>>говнокодить
Насчет говнокода я бы поспорил. Есть куча языков, где нет никаких варов, и прекрасно обходятся. Конкретно в JS он нужен для локальных переменных. Зачем его в глобальную область притянули -- вообще не понятно. Возможно, что-то связано с производительностью, либо, какие то скрытые дыры в дизайне.
|
|
14.03.2015, 21:53
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Есть куча языков, где нет никаких варов, и прекрасно обходятся
|
Да, транслирующийся в JS coffeescript - тому пример. Но это другие языки, с другой архитектурой и в другом стиле, глупо накладывать их на JS.
Цитата:
|
Зачем его в глобальную область притянули -- вообще не понятно.
|
1. Внешний скоп далеко не всегда глобален.
2. Очевидно, для единого стиля.
|
|
|
|