javascript - отступ и положение фигурных скобок

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

function code()
{
    if(code)
    {
     code
    }
}

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

function code(){
    if(code){
    code
    }
}

этот первый также является моим предпочтительным стилем, потому что он более ясен и понятен. Мой вопрос: почему я должен следовать второму примеру? есть плюсы??


person joseMana    schedule 12.06.2017    source источник
comment
Никаких преимуществ, кроме двух строк кода меньше. Это также может быть более удобочитаемым для некоторых людей в первом классе.   -  person hRdCoder    schedule 12.06.2017
comment
Вы можете скрыть ненужные пробелы в первом примере.   -  person Ioan    schedule 12.06.2017
comment
Тот же код. Поверьте, причина в том, что это предпочтительный стиль для PHP, который имеет тенденцию иметь несколько слоев, и большинство разработчиков JavaScript исходят из фона PHP. Мое мнение.   -  person AntonZlatkov    schedule 12.06.2017
comment
Я лично ненавижу первую форму, но при кодировании в Visual Studio у меня нет выбора... Я думаю, что вы должны использовать ярлык вашего редактора для отступов и работать с ним.   -  person Washington Guedes    schedule 12.06.2017
comment
Прочтите этот почти идентичный вопрос 7-летней давности.   -  person chazsolo    schedule 12.06.2017
comment
@WashingtonGuedes Visual Studio дает вам возможность решить, как вы хотите разместить фигурные скобки. Проверьте Инструменты › Параметры › Текстовый редактор › JavaScript   -  person Scott Marcus    schedule 12.06.2017
comment
@ScottMarcus :o ... Я сделаю это прямо сейчас ;-) Спасибо   -  person Washington Guedes    schedule 12.06.2017
comment
Спасибо, парни!!. Я люблю это сообщество. :)   -  person joseMana    schedule 12.06.2017


Ответы (2)


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

В JavaScript {} — это синтаксис литерала объекта, а в JavaScript также предусмотрена автоматическая вставка точки с запятой. Эта автоматическая вставка точки с запятой может привести к тому, что функции, написанные с открывающей фигурной скобкой в ​​строке, отличной от функции, тело которой она определяет, будут выполняться не так, как вы ожидаете. Смотрите это для деталей:

Почему результаты зависят от размещения фигурных скобок?

person Scott Marcus    schedule 12.06.2017
comment
Это правильно, но вы можете использовать первый синтаксис и минимизировать его, что решает проблему. Первый синтаксис более удобочитаем и помогает, когда код очень длинный/большой. - person 27px; 16.01.2021
comment
@27px Вопрос не в минификации. Кроме того, то, что более читабельно, субъективно. Я бы сказал, что второй более удобочитаем, потому что я трачу гораздо больше времени на кодирование на JavaScript (где размещение имеет значение), чем на C# (где это не имеет значения). Итак, поскольку разумные люди могут не согласиться со стилем, лучше придерживаться сути. Существует существенная разница в том, как будет выполняться некоторый код, и размещение { в новой строке может привести к ошибкам, поэтому просто не делайте этого. - person Scott Marcus; 16.01.2021
comment
Это только в случае оператора return, может быть и в некоторых других анонимных функциях строки, но это только исключения в js, я также в основном кодирую в JS, я все время использую первый синтаксис, за исключением некоторых мест, таких как возврат и объект вместе и Т. Д. - person 27px; 16.01.2021
comment
Да, и в этом суть. Если один синтаксис может привести к непредвиденным результатам в пограничных случаях, а другой никогда не приведет к таким же непредвиденным результатам, зачем вообще использовать тот, который может иметь неприятные последствия? Вы не должны. Это антипаттерн. - person Scott Marcus; 16.01.2021

В основном предпочтения. Я лично предпочитаю второй способ, но единственная разница заключается в том, что срабатывает автоматическая вставка точки с запятой в javascript. Нет никакой разницы при работе с объявлениями функций или операторами if.

person Xanuthatusu    schedule 12.06.2017
comment
Неправда, при определенных обстоятельствах из-за автоматической вставки точки с запятой исполнение будет отличаться. - person Scott Marcus; 12.06.2017
comment
А, ТИЛ. Я просто всегда использовал одни и те же открывающие скобки, поэтому никогда не сталкивался с этой проблемой. - person Xanuthatusu; 12.06.2017
comment
Э-э, да, есть разница (из-за автоматической вставки точки с запятой, которая, кстати, всегда срабатывает) с объявлениями функций и операторами if. - person Scott Marcus; 12.06.2017