Краткое объяснение: поскольку JS использует обзор уровня функции, вы можете выполнять кучу действий внутри функции и оставаться в этой области. Это полезно для вызова кода, который не связывается с глобальным пространством имен. Он также позволяет создавать частные переменные - если вы объявляете переменную внутри анонимной функции и выполняете ее немедленно, только другой код внутри анонимной функции может получить доступ к этой переменной.
Например, предположим, что я хочу создать глобальный уникальный генератор id. Можно сделать такой код:
var counter = 0;
var genId = function()
{
counter = counter + 1;
return counter;
}
Однако теперь любой может испортить счетчик, и теперь я загрязнил глобальное пространство имен двумя переменными (counter и genId).
Вместо этого я мог использовать анонимную функцию для генерации моей функции счетчика:
var genId = function()
{
var counter = 0;
var genIdImpl = function()
{
counter = counter + 1;
return counter;
}
return genIdImpl;
}();
Теперь у меня есть только одна переменная в глобальном пространстве имен, что выгодно. Что еще более важно, переменная счетчика теперь не может быть изменена - она существует только в области анонимных функций, поэтому доступ к ней может получить только функция genIdImpl (которая была определена в той же области).
Похоже, что в примере кода YUI они просто хотят выполнить код, который вообще не загрязняет глобальное пространство имен.
Ответ 2
Они хотят избежать конфликтов пространства имен, я бы предположил. Кажется хорошей практикой в JS.