почему самовызывающаяся функция выдает ошибку без заключения скобок

У меня есть два фрагмента кода. Первый работает нормально, а второй выдает ошибку.

var b = function abc() {
    alert(a);
}()

Здесь я получаю предупреждающее сообщение.

function abc() {
    alert(a);
}()

Здесь я получаю сообщение об ошибке «Uncaught SyntaxError: Unexpected token )». Я использую браузер Chrome.

Опять работает следующее.

(function abc() {
    alert(a);
})()

Каково назначение закрывающих скобок?


person HSM    schedule 24.03.2018    source источник
comment
Они преобразуют оператор объявления функции в функциональное выражение.   -  person Teemu    schedule 24.03.2018


Ответы (1)


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

Статья Википедии весьма информативна по этому вопросу.

person roonroon    schedule 24.03.2018