Опасные последствия стиля Allman в JavaScript

Я не могу вспомнить, где, но недавно я передал комментарий, где пользователь сказал, что 1TBS более предпочтителен, чем Allman в JavaScript, и сказал, что Allman имеет опасные последствия для JavaScript.

Было ли это действительным выражением? Если да, то почему?

Ответ 1

return не может иметь LineTerminator после этого:

return
{


};

рассматривается как return; (return undefined) вместо return {}; (возвращает объект)

Подробнее см. правила Automatic Semicolon Insertion (ASI).

Ответ 2

Это действительное утверждение.

Поскольку JavaScript-движки имеют то, что называется ASI (Automatic Semicolon Insertion), которое вставляет точку с запятой, если необходимо, при возвратах строк. "При необходимости" является двусмысленным; иногда это работает, а иногда нет. См. правила.

Итак, как сказано в других ответах:

return
{
};

// Is read by the JavaScript engine, after ASI, as:
return; // returns undefined
{ // so this is not even executed
};

Поэтому он не рекомендуется для операторов return.

Однако, если ваши рекомендации рекомендуют стиль Allman для объявлений функций, это отлично. Я знаю некоторых, которые делают.

Ответ 3

Я думаю, это зависит от заявления. Например, оператор возврата может быть сломан, если открытие скобки находится на новой строке. Дополнительная информация здесь.

Ответ 4

return {
    a: "A",
    b: "B"
};

// vs.

return // Semicolon automatically inserted here! Uh oh!
{
    a: "A",
    b: "B"
}