Почему JavaScript настаивает на скобках для функции, но не для чего-то еще? - PullRequest
0 голосов
/ 09 октября 2018

В javascript у меня может быть, например,

var a = 1;
while (a < 10) a++;

if (a === 10) a = 1;

Так что есть ситуации, когда скобки не требуются (хотя я обычно вставляю их для ясности и чтобы jshint не беспокоил меня по поводу их отсутствия).

1005 * Любопытно (во всяком случае, мне) function не работает так же.Я делаю
function bar(a) { return a + 1; }

, но не могу сделать

function foo(a) return bar(a);

Чем отличается function от того, что он не может вести себя как if и while и т. Д.?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Все дело в синтаксисе.

В схеме функция может выглядеть так:

(define (square x)
    (* x x))

В python функция может выглядеть так:

def square(x):
    return x * x

Итак, оператор объявления функции JavaScript выглядит следующим образом:

function name_this_is_function_header(...parameters) {
    // and this is function body
    // statements
}

Он должен содержать тело с нотацией {}.(хотя ES6 добавляет синтаксический сахар для функции стрелки, () => {}, вы можете опустить {}, если в любом случае в нем только один оператор)

функция - токен, () - паратокены, {} также пара токенов, компилятор или интерпретатор обрабатывают их все как целую абстракцию с именем функции JavaScript.

JavaScript заимствовал много синтаксиса из Java, Java делал то же самое с C ++, C ++ делал то же самоевещь для C ..., вот почему.

Для оператора, такого как if и while, его синтаксис:

if (condition) one-statement;
while (condition) one-statement;

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

Одиночный оператор не нуждается в {}, составной оператор - это просто несколько отдельных операторов, включенных в {} токены или записиЕсли вам нужно несколько утверждений после true, вы должны использовать составное выражение в целом.

Это не о чем-то загадочном, просто как вы пишете это для выражения.

0 голосов
/ 09 октября 2018

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

Это просто синтаксический сахар для (ленивого :)) программиста.

Если у вас несколько операторов вif или while, вам все равно придется написать {} вокруг них.

Я бы лично предложил всегда так делать, потому что забывание {} может иногда приводить к неочевидным ошибкам:

let i = 0;
if (i > 0)
  i++;
  console.log('this still happens');

Добавление функций стрелок в ES6 допускает такое же поведение с функциями:

Ваша функция:

function bar(a) { return a + 1; }

Может быть написано без{} потому что у него есть одно выражение:

const bar = a => a + 1;

Но пропуск {} для нескольких операций снова будет ошибкой:

let x = x => x + 1; console.log('this still happens');

Вы можете обойтись без использования оператора , для объединения выражений:

let i = 0;
if (i > 0)
  i++, // <-- notice the comma
  console.log('now this does not happen');

Но это, вероятно, делает код менее читабельным.

Суть в том, что использование {} по умолчанию является хорошим выбором в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...