Само по себе такое объявление функции бесполезно.Такое объявление полезно только в том случае, если вы фактически вызываете функцию, что делается следующим образом:
(function (h, j) { ... } (x, y));
Обычно это делается для скрытия переменных, поскольку JavaScript имеет только область действия функции (без области видимости блока).
Редактировать:
Некоторые примеры - надеюсь, это не смущает вещи ...
Как уже упоминалось в комментарии, этот метод полезен для хранения переменных вне глобальной области видимости.,Например, некоторые сценарии инициализации могут выполнять следующие действия:
(function () {
var x = 42;
var y = 'foo';
function doInitialisation(a, b) {
// ...
}
doInitialisation(x, y);
}());
Ни один из x
, y
или doInitialisation
не отображается после завершения функции.
Другой вариант использованиядля избежания замыканий в петлях.Например, следующее вызывает известную проблему:
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function () {
alert(i);
};
}
В приведенном выше примере каждый обработчик onclick имеет одинаковое значение i
.Область действия функции может избежать этого:
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].onclick = (function (x) {
return function() {
alert(x);
}
}(i));
}