Само-вызывающая безымянная функция удобна тем, что у нее нет имени и можно в одном файле писать много таких функций и не будет конфликтов с именами.
Синтаксис без параметров
( function(){} )();
или
( function(){}() );
Синтаксис с параметрами
( function (param1, param2, ...){} )(значение1, значение2, ...);
Html
<html>
<body>
<script>
// Само-вызывающая безымянная функция без параметров
( function(){ alert('Hello1'); } )();
// Само-вызывающая безымянная функция без параметров
( function(){ alert('Hello2'); }() );
// Само-вызывающая безымянная функция с одним параметром
( function(text) {alert(text);} )("Hello3");
</script>
</body>
</html>
Чтобы не писать новую функцию с именем, а вызывать само-вызывающую безымянную функцию и небыло конфликтом с именами других функций.
То есть обычно само-вызывающая безымянная функция это какая-то своя независимая функция которая, что то делает.
Само-вызывающая безымянная функция используется в рекламе
Yandex
Если вы хотите чтобы ваш сайт зарабатывал деньги то вам
Yandex предлагает встроить на вашу страницу рекламу.
Yandex для каждого сайта дает свой кусочек кода рекламы. Вот пример такого кода рекламы:
JavaScript
<!-- Yandex.RTB R-A-234410-1 -->
<div id="yandex_rtb_R-A-234410-1"></div>
<script type="text/javascript">
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-A-234410-1",
renderTo: "yandex_rtb_R-A-234410-1",
horizontalAlign: false,
async: true
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(this, this.document, "yandexContextAsyncCallbacks");
</script>
(function(w, d, n, s, t) ... это и есть само-вызывающая безымянная функция.
То есть на вашей странице может быть много ваших функций.
При вызове само-вызывающей безымянной функции не вызовется ни одна из ваших функций (не будет конфликта имен).