Почему эта функция JavaScript в скобках?

Я искал решение проблемы и нашел это aswer /questions/23114932/randomize-setinterval-kak-perepisat-tot-zhe-sluchajnyij-posle-sluchajnogo-intervala/23114940#23114940

Написанная функция:

(function loop() {
    var rand = Math.round(Math.random() * (3000 - 500)) + 500;
    setTimeout(function() {
            doSomething();
            loop();  
    }, rand);
}());

Мой вопрос таков: почему в круглой скобке функция также имеет () в конце? Меня это немного смутило, я никогда раньше этого не видел.

2 ответа

Это пример выражения немедленного вызова функции.

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

  • Обтекание в круглых скобках говорит парсеру обрабатывать все внутри них как выражение.
  • Вызов выражения (с ()) сразу после этого гарантирует, что область действия этого выражения будет запечатана.

Фрагмент создает анонимную функцию и немедленно вызывает ее.

Проблема с обходом без паренов,

// This is a syntax error
function () {
  something;
}();

в том, что это синтаксическая ошибка; поскольку оператор начинается с 'function', синтаксический анализатор ожидает, что имя функции будет следовать. Свертывание всего этого в паранах делает синтетически законным определение там анонимной функции.

// This is valid syntax
(function () {
  something;
}());
Другие вопросы по тегам