Почему эта функция 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;
}());