Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужно ли ставить ; в JS? (https://javascript.ru/forum/misc/33788-nuzhno-li-stavit-%3B-v-js.html)

dmitriymar 08.12.2012 20:35

tenshi,
механизм не важен -интерпретатор здесь абстракция. ключевое -
Цитата:

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

что соответствует
Цитата:

Сообщение от tenshi
А так же интерприиатор тратит время на авторасстановку.

против чего ты возражал
Цитата:

Сообщение от tenshi
не знаю как интерприиаторы, а интерпретаторы ничем таким не занимаются.


Hoshinokoe 08.12.2012 20:44

Shitbox2,

Вот отличная статья на эту тему на хабре, все узкие моменты разбираются.

И ответ на ваш вопрос:
"На практике надо ставить везде, ибо все так или иначе сжимают скрипты. И отсутствие точки с запятой может вызвать ошибку в сжатом скрипте, которую крайне сложно найти. "

tenshi 08.12.2012 22:09

> против чего ты возражал

и где ты узрел в моих словах автоподстановку, если в синтаксическое дерево лексема ";" даже не попадает?

> И ответ на ваш вопрос:

это из комментария, а статья о противоположном. и на практике надо выбирать толковые инструменты, а не подстраиваться под кривые.

> И всё же спасенные микросекунды не стоят того, чтобы отказываться от явного разделения конструкций.

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

Shitbox2 09.12.2012 14:18

Цитата:

нет, проблема была в том, что ты начал выражение со скобки. не начинай выражения со скобок и не будет у тебя больше никогда таких проблем.
Может быть проще принять такой синтаксис
;(function(){ ... })()
Тогда ; придется ставить лишь в исключительных ситуациях, а не после каждой строки?

Hoshinokoe, спасибо за статью, читаю...

tenshi 09.12.2012 14:23

лучше всё же такой
Цитата:

Сообщение от tenshi (Сообщение 220304)
void function(){ /*код*/ }()


Shitbox2 09.12.2012 14:31

А почему он должен работать? Т.е., если записать
string function(){ return 'str' }()
то ф-я выполнится? Что-то не нашел такого в синтаксисе...

Из статьи
Цитата:

Когда программа встречает токен, недопустимый грамматикой, вставляется ";", если (а) в этом месте присутствует перенос строки
Вот теперь проблема с выражением, начинающимся со скобок (и с новой строки) становится не ясна. Либо оптимизатор не полностью поддерживает стандарт языка.

P.S. По своему опыту знаю, что пропуск точек с запятой мешает автоформатированию в jsfiddle и т.п. средах, что немного угнетает...

tenshi 09.12.2012 15:46

нет такого синтаксиса. просто есть оператор void.

BallsShaped 09.12.2012 19:15

Цитата:

Сообщение от tenshi
нет, проблема была в том, что ты начал выражение со скобки. не начинай выражения со скобок и не будет у тебя больше никогда таких проблем.

Пишу не один, так что за весь код сказать не могу, но я нигде не видел выражений, начинающихся со скобок. Т.е. это сделал минификатор.

tenshi 09.12.2012 19:22

какая прелесть)

tenshi 09.12.2012 22:12

> Не вижу ни одной веской причины, почему это обязательно необходимо предпочесть этому

меньше нагромождение скобочек, например

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

как и твоя приязнь. о чём спор?

> new function(){ /*код*/ }

тут создаётся лишний объект


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